Интерфейс без виртуализации

Когда я слышу подобное, всегда прошу свидетелей чистого и кошерного повторить на нём вот такую задачу (типичная, кстати, задача для микроконтроллеров). Почему-то никто ни разу не сподобился.

Может, Вы проведёте мастер-класс?

P.S. Кстати, тот код живёт и используется, периодически немного меняется. Живёт он, на сегодня, здесь.

Не могу определиться, кого больше жалко, кошку или гориллу.

А зачем у вас constexpr у массивов?

Что же до функций - заменяете constexpr на __attribute__((const)) и, я думаю, получится то же самое, что и у вас, но только на Си.

Я никогда такого контроллера в руках не держал, не могу соревноваться на таком примере.

И, к тому же, говорили мы о классах и виртуальных функциях, к чему мой комментарий и относился. А в вашем коде ничего такого нет и близко.

О, Евгений, я вижу у вас тернарную мою любимую операцию:

const uint8_t candidate, const uint32_t frequency, const int8_t nTimer) {
    return
    (prId >= timerParameters[nTimer].totalPrescalers) ? candidate
                                                      : getPrescalerId(newError, 
                                                                                   absError(frequency, prId+1,nTimer), 
                                                                                   prId+1, 
                                                                                  (error <= newError) ? candidate
                                                                                                                     : prId, 
                                                                                  frequency, 
                                                                                  nTimer);

Вот и проделайте это! А то языком-то потрындеть все горазды!

Там нет классов? Боюсь, Вы не видели кода.

Впрочем, это без разницы. Можете повторить на чистом и кошерном? Если нет, то и трындеть не о чем.

Мы про этот код говорим?

Не знаю, что у Вас на картинке, я говорю про код по моей ссылке.

Только я уже не говорю.

Пожалуйста, поймите, Вы представить себе не можете сколько раз я слышал фразы типа:

но, при этом, никто так ничего и не заменил!

Такие разговоры уже набили оскомину и вызывают аллергию. Я не участвую в пустопорожнем трындеже. Можете – замените, обсудим результат. Не можете – «туалет прямо и направо».

Я это прекрасно понимаю. То, что я делаю сейчас, это больше для саморазвития. Переделывая свой же проект, я пытаюсь хоть немного разобраться в С++. Сейчас мои познания в этом языке немногим больше, чем начальные (причем выше С++11 я даже и не пытался заглядывать).

как по мне, так строго наоборот
Модифицировать и отлаживать проще.
А еще в хорошо написанный код с наследованием и виртуальными методами значительно легче добавлять новый функционал, чем в “вермишель” на обычном С.
Более того, когда у вас разветвленная система наследников базового класса, дописав что-то в один - вы практически бесплатно получаете это во всех остальных

Главное в наследовании - обязательно виртуальный деструктор, иначе всё пропало.

Правильно: фсёпрапало!

Да.__

Только, в данной задаче проще ручками всё посчитать. Будет и надёжнее, и понятнее, КМК. Как пример:

#if F_CPU == 8000000
  #define led_timer_init() (T1_CTC_OCR, TCCR1B |= T1_DIV8, OCR1A = T_SYS_US - 1, TIMSK1 |= 1<<OCIE1A | 1<<OCIE1B)
#elif F_CPU == 1000000
  #define led_timer_init() (T1_CTC_OCR, TCCR1B |= T1_DIV8, OCR1A = T_SYS_US / 8 - 1, TIMSK1 |= 1<<OCIE1A | 1<<OCIE1B)
#else
  #error F_CPU must be 8 or 1MHz!
#endif

Те кто боятся #define пишут inline.

И в каком же тут месте считается “данная задача”?

Задача, как я помню, определить prescaler и количество тиков для заданного интервала (или частоты).

В Вашем примере ничего подобного не считается.

Пример не связан с вашей задачей.

А, понятно, просто картинко из сети. Ну, я так и подумал.

Картинка из жизни.)

Коллега, я имею два вопроса:

  1. Вы хотите сказать, задача нерешаема на чистом C?
  2. Если таки она решаема, вы бы стали доказывать это например мне, забесплатно корячась над портированием моего кода (если бы оно было моим)?

Задача портирования кода с плюсов на чистый C давно обсосана. не забывайте, что сначала был чистый С и все задачи решались на нем. Лично я портировал на чистый С национальную криптографию одной из стран СНГ, с ноды, буквально с гребаного динамически типизируемого яваскрипта на микроконтроллер, и ничего, получилось, работает, ссылку правда не могу дать она под NDA. Короче, к чему это я. Если вопрос прям принципиальный, учреждайте призовой фонд баксов в 500, я думаю решение на чистом С появится быстрее чем вы думаете)

Я отвечу, вместо ЕП.
Решение на С++ не занимает ни одного байта в коде. То есть все вычисления производит компилятор.
Такое решение очень трудно повторить на чистом С, потому, что вычисления времени компиляции ограничены препроцессором. На нем можно сделать много, но не всё.

Не нужно спорить. Категоричные мнения вообще плохой признак ;).

Что же это за национальная криптография такая, что программисты после работы над ней не только живые и с целыми руками, но еще и трындят о своих работах направо и налево. Молдавский 3DES, поди.

1 лайк