ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
23 декабря
1436941 Топик полностью
Vit (19.05.2024 21:19, просмотров: 243) ответил Samx на Почему извратиться? Наоборот, самый прямой путь - для чего это всё в С++ и придумано. Ну вот вам другой канонический пример:
это другое:) вот возьмите дуину - там есть setup и loop. это похоже на старт (с какой-то инициализацией и т.п.) и бесконечный процесс, который по сути таки перезапускаемый набор операций. так вот у процесса с идеологией run-to-complete (см. Quantum Leaps), т.е. конечный автомат (finite state machine), котрый торчит из вашего doStep() есть множество сходных названий, и, КМК, это скорее задача (task). вы соорудили примитивный диспетчер, но собственно задачи запихали по-глубже 

в класс и героически сделали их примерно одного типа, а сами классы породили от пустоты (называю такое "плюсы ради плюсов"). в дуине эта самая диспетчеризация выглядит (можно посмотреть, напрмер, espurna) как

setup(){

  setup0();

...

  setup16();

}

loop(){

  loop0();

...

  loop16();

}

и массив, который у вас нагородился, не нужен от слова совсем, а вот список бы не помешал. при списке можно добавлять задачи и снимать, а не корячиться каждый проект с определением используемого количества элементов массива.

насчет I2C пример из другой области, но даже на Си, если используется такой вот ногодрыг, то собственно ногодрыг описывается функциями. и, не поверите, рулится несколько экземпляров функций ногодрыга выбором номера интерфейса (вот такая перегрузка голыми ручками), а логическая часть кода даже не требует создания экземпляров, ибо там нет статических параметров. вот с надстройками над I2C типа дуинистого wire всё хуже. мне приходилось использовать в поделке дуину на ESP, и пришлось поправить эту самую wire (cpp), чтобы оно таки могло работать в нескольких экземплярах класса, ну и twi(c) полечил - удалил пару модификаторов static у функций и сделал их видимыми...