Я, к сожалению, не могу прямо взять ваш проект, у меня плата с STMF407. Но вы же дескриптор не из пальца высосали? Поделитесь, чем вы пользовались, чтобы его составить, пожалуйста.
Возможно, кто-нибудь сможет подсказать, в каком документе можно узреть значения всех полей HID-дескриптора? В официальной документации я утонул, но ничего вразумительного не нашел.
Я пытаюсь сгенерировать самый тупой дескриптор для передачи 64 байт, но я никак не могу понять, какие поля нужно указывать? Нужно ли указывать и REPORT_SIZE и REPORT_COUNT? LOCAL_MAXIMUM — это максимум для одного байта или для всех?
Отмечу один небольшой недостаток CRTP: если в базовом классе не просто интерфейс, а содержит какие-нибудь методы, то для каждого класса-потомка код базовых методов будет дублироваться. Потому что для компилятора это совершенно разные классы.
Диссертация член-корреспондента РАН Бориса Березовского на соискание ученой степени доктора наук <..> является обобщением задачи о разборчивой невесте.
Очевидно, запретить использование ключевого слова lambda в любом другом качестве. Насколько я понимаю, нельзя ведь создать переменную double int или функцию void auto(void).
Мне вот интересно, как комитет выбирает — добавить новое ключевое слово или добавить новую разрывающую мозг конструкцию из спецсимволов?
Например, почему constexpr — это слово, auto — это слово, а лямбда — не lambda, а []?
И если для && для move-sematics это еще ладно, амперсенд ассоциируется только с ссылками, но квадратные скобки-то как с функцями связаны?
Соответственно, имхо, swap написать тупо быстрее, чем :=: (учитывая, что нужно до шифта тянуться, символов всего на один меньше, а ясности меньше).
Еще интересно, почему в качестве разделителя выбрали одинарную кавычку, а не нижнее подчеркивание (которое макросы не сломало бы, вроде).
Почему не может? Я плоховато помню линейную алгебру, но вроде бы никто не запрещает создать свою конечную группу и на ней объявить умножение таким образом, чтобы 2*2 было равно 5.
Пожалуй, можно упомянть и фильм «Хоттабыч» (хотя как человек главный герой очень неплохо сыгран).
Там и взлом генетического кода за пару дней и бег виртуального Хоттабыча сквозь html-страницы.
С другой стороны, Хоттабыч все-таки джинн.
У меня вопрос по поводу сдвигов отрицательных чисел.
Насколько я помню, в своей статье habrahabr.ru/company/pvs-studio/blog/141880/ вы рекомендуете вместо (-1 << x) использовать (~0 << x).
Я пытаюсь сгенерировать самый тупой дескриптор для передачи 64 байт, но я никак не могу понять, какие поля нужно указывать? Нужно ли указывать и REPORT_SIZE и REPORT_COUNT? LOCAL_MAXIMUM — это максимум для одного байта или для всех?
То есть, принцип причинности может не выполнятся.
(Книга, к сожалению, на русский не переводилась и написана не самым легким языком, но это весьма полная работа на тему «что такое сознание»).
По поводу топика — первым комментарием все сказано.
А constexpr?
Понятное дело, что нужен какой-то компромисс, я всего лишь хотел подчеркнуть, что ключевое слово обычно понятнее, чем хитрое сочетание спецсимволов.
Например, почему constexpr — это слово, auto — это слово, а лямбда — не lambda, а []?
И если для && для move-sematics это еще ладно, амперсенд ассоциируется только с ссылками, но квадратные скобки-то как с функцями связаны?
Соответственно, имхо, swap написать тупо быстрее, чем :=: (учитывая, что нужно до шифта тянуться, символов всего на один меньше, а ясности меньше).
Еще интересно, почему в качестве разделителя выбрали одинарную кавычку, а не нижнее подчеркивание (которое макросы не сломало бы, вроде).
Там и взлом генетического кода за пару дней и бег виртуального Хоттабыча сквозь html-страницы.
С другой стороны, Хоттабыч все-таки джинн.
Вот этот момент был не ясен. Я не заметил, что бы там писали "~ — 0".
В любом случае, я сомневаюсь, что сейчас вообще можно найти машину с хранением отрицательных чисел в обратном коде.
Насколько я помню, в своей статье habrahabr.ru/company/pvs-studio/blog/141880/ вы рекомендуете вместо (-1 << x) использовать (~0 << x).
Однако, вот тут stackoverflow.com/questions/809227/is-it-safe-to-use-1-to-set-all-bits-to-true пишут, что ~0 не обязательно эквивалентен всем единичным битам в двоичном представлении (хотя, честно говоря, я не до конца понял, почему).
Возможно, наиболее безопасным будет сделать что-то вроде:
unsigned long a = -1; b = (a << x);