powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / Массив ссылок на функцию объекта и выполнения этих функций
8 сообщений из 8, страница 1 из 1
Массив ссылок на функцию объекта и выполнения этих функций
    #40013614
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ардуино использует С++
Создал несколько разных классов и в некоторых классах есть void update()
Хотел бы в void loop() выполнять один метод, который бы выполнял в каждом объекте класса функцию update()

Сейчас это выглядит так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
TIMER timer1;
TIMER timer2;

void loop(){
  timer1.update();
  timer2.update();
  .. и таких может быть много

.. дальше алгоритм с условиями..



Почитал о ссылках и указателях, решил, что смогу объявить масив *void arrobj[20]; например
в масив думал, что буду помещать ссылку на функцию объекта или на объект(пробовал всякое)
потом в одной функции хотел в цикле пробежаться по массиву и вызвать эти же функции классов, чтоб упростить код в loop
Код: plaintext
1.
2.
3.
void loop(){
  update();
...



компилятор выдает массу ошибок и не в какую не получается так сделать. А вообще это реально?
...
Рейтинг: 0 / 0
Массив ссылок на функцию объекта и выполнения этих функций
    #40013615
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уточню, что есть разные классы и у большинства есть update
Например
TIMER, BUTTON, SWITCH, SENSOR...
...
Рейтинг: 0 / 0
Массив ссылок на функцию объекта и выполнения этих функций
    #40013616
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например так:
Код: plaintext
1.
2.
3.
for (auto ptimer: {&timer1, &timer2}) {
  ptimer->update();
}
...
Рейтинг: 0 / 0
Массив ссылок на функцию объекта и выполнения этих функций
    #40013624
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyНапример так:

Это бы потребовало общего предка с виртуальным update(), нет?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Массив ссылок на функцию объекта и выполнения этих функций
    #40013654
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А каким образом можна при инициализации класса
добавить в массив ссылку на функцию update() класса ?
Например
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class TIMER{
    public:
        TIMER(){
            this->next_time = 0;
            this->timer_status = 0;
            БупбличныйМассив[МаксКство+1] = СсылкаНаUpdate
        }
   update(){
      //.....
  }

  //....



А уже в другой отдельной функции update() которая не принадлежит никакому классу
пробежаться по циклу БупбличныйМассив и вызвать эти все зарегистрированные функции по ссылке, которые находятся в массиве?

Я пробовал передавать ссылку на класс - ошибок нет. Как только пробовал ссылаться из ссылки на *(БупбличныйМассив[f])->update(); сразу копилятор ругается на ->update
...
Рейтинг: 0 / 0
Массив ссылок на функцию объекта и выполнения этих функций
    #40013659
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159,

Контейнерный класс (или «класс-контейнер») в языке C++ — это класс, предназначенный для хранения и организации нескольких объектов определенного типа данных (пользовательских или фундаментальных).

std::vector
?
https://ravesli.com/urok-151-kontejnernye-klassy/
...
Рейтинг: 0 / 0
Массив ссылок на функцию объекта и выполнения этих функций
    #40013660
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159
которая не принадлежит никакому классу
не делайте без причин функции без классов и без пространства имен.
"каждый сын имеет родителя" ООП
...
Рейтинг: 0 / 0
Массив ссылок на функцию объекта и выполнения этих функций
    #40013666
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159
А каким образом можна при инициализации класса
добавить в массив ссылку на функцию update() класса ?

А уже в другой отдельной функции update() которая не принадлежит никакому классу
пробежаться по циклу БупбличныйМассив и вызвать эти все зарегистрированные функции по ссылке, которые находятся в массиве?

Я пробовал передавать ссылку на класс - ошибок нет. Как только пробовал ссылаться из ссылки на *(БупбличныйМассив[f])->update(); сразу копилятор ругается на ->update


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
#include <vector>
#include <functional>

struct Timer {
    Timer(std::vector<std::function<void()>>& updaters)
    {
        updaters.emplace_back([this](){ update(); });
    }
    void update()
    {

    }
};

int main()
{
    std::vector<std::function<void()>> updaters;
    Timer timer1{updaters}, timer2{updaters};
    for (auto& update: updaters) {
        update();
    }
    return 0;
}
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Массив ссылок на функцию объекта и выполнения этих функций
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]