Объявление объектов класса.

mexicanec

✩✩✩✩✩✩✩
26 Июл 2021
7
0
Народ.
Подключил две rgb ленты к двум портам ардуино. В скетче использую библиотеку микролед. Теперь для работы с каждой ленты индивидуально нужно объявить экземпляры классов, но не хочется задваивать процедуры для каждого объекта. додумался до такого:
C++:
  microLED<NUMLEDS, STRIP_PIN_foot , MLED_NO_CLOCK, LED_WS2812, ORDER_GRB, CLI_AVER> strip;
  if (strcmp(nameZone, "foot") == 0) {
    microLED<NUMLEDS, STRIP_PIN , MLED_NO_CLOCK, LED_WS2812, ORDER_GRB, CLI_AVER> strip;
  }
 strip.set(i, mWheel8(counter + i * 255 / NUMLEDS));
 strip.show();
но этот код не срабатывает т.к. повторное объявление не затирает предыдущее.
Подскажите, пожалуйста , как лучше сделать
 

bort707

★★★★★★✩
21 Сен 2020
3,066
914
Это вам две строчки 5 и 6 лень "задваивать" или вы собрались при каждом обращении к ленте заново обьявлять экземпляры класса?
Нет, так не выйдет, придется писать для каждой ленты свои операторы.

А если у вас верхняя и нижняя ленты показывают одно и то же - не надо было их сажать на отдельные пины, посадили бы параллельно на один...

Я так понимаю, что предлагать почитать учебник по С++ смысла нет?
 
Изменено:

mexicanec

✩✩✩✩✩✩✩
26 Июл 2021
7
0
@bort707 это я понял что для каждой ленты свои операторы, но т.к. у меня в каждой функции идёт вывод на ленту, мне придется задвоить функции? А если я захочу 4 ленты подключить, мне придется функцию повторять 4 раза для каждого экземпляра?
 

bort707

★★★★★★✩
21 Сен 2020
3,066
914
А если я захочу 4 ленты подключить, мне придется функцию повторять 4 раза для каждого экземпляра?
Чтобы не повторять - осваивайте массивы и циклы, функции с параметрами...
И еще - если у вас на 4х лентах будут идентичные эффекты, то зачем вы их подключали к разным пинам?
 

bort707

★★★★★★✩
21 Сен 2020
3,066
914
Хотя нет, вру. В данном случае у каждой ленты свой отдельный тип класса, поэтому их ни в массив собрать, ни параметрами в функцию передать не получится.
К сожалению, тут даже если будет с десяток лент - проще будет писать отдельные операторы для каждой.
Такова плата за пользование шаблонами.
 

poty

★★★★★★✩
19 Фев 2020
3,237
942
Я не стал отвечать, так как не понял с самого начала, что хотел автор темы. Может всё же уточните, что за функции, почему их нужно размножать, если в них делается одно и то же?
Если речь идёт о передаче данных разного типа в функцию, то можно передавать не весь класс, например, а только те "общие" параметры, которые в ней используются (или указатели на них, что правильнее).
 

mexicanec

✩✩✩✩✩✩✩
26 Июл 2021
7
0
@poty, ну ленты выполняют один и тот же код, но не одновременно, например пока одна мигает одним цветом, другая мигает другим, третья горит радугой, четвертая вообще не работает
 

poty

★★★★★★✩
19 Фев 2020
3,237
942
Ну, тогда передавайте указатели на те свойства и методы, которые используете - они же имеют одинаковое описание - и пишите в коде не прямой вызов, а через указатели.
Допустим, в приведённом примере - передавайте указатели на функции strip.set() и strip.show().
 

bort707

★★★★★★✩
21 Сен 2020
3,066
914
Можно слегка модифицировать либу микролед, вынеся номер пина из параметров шаблона. Тогда хотя бы ленты с одинаковым числом светодиодов будет иметь один тип и их можно будет обьединять в массивы.