Задать вопрос
PavelK
@PavelK

Наиболее красивый и правильный способ передачи параметров сквозь другой класс?

Приветствую!
Частенько сталкиваюсь с тем, что например:
Есть класс, например CamsList, где соответственно идёт работа со списком камер (добавление,изменение, удаление и тд)
есть другой класс, например Cam - сам объект камеры.
Допустим самой камере для работы нужен общий класс для всех камер OutputBuffer (Который нафиг не нужен CamsList).

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

Ни то, ни то не нравится. Какие есть ещё способы, как бы вы поступили?
  • Вопрос задан
  • 272 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 3
@nirvimel
#include <iostream>

class Cam;

class OutputBuffer {
public:
    OutputBuffer() { std::cout << "OutputBuffer " << this << " initialized\n"; }

    void receive(Cam &cam) { std::cout << "OutputBuffer " << this << " receiving data from camera " << &cam << "\n"; }
};

class Cam {
    static OutputBuffer buffer;
public:
    Cam() { buffer.receive(*this); }
};

OutputBuffer Cam::buffer = OutputBuffer();

int main() {
    Cam cam1, cam2;
};


OutputBuffer 0x6013d1 initialized
OutputBuffer 0x6013d1 receiving data from camera 0x7fff7742970e
OutputBuffer 0x6013d1 receiving data from camera 0x7fff7742970f
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Указание любой переменной родительского класса через static. Это используется и в C/C# и Unity3D, и вообще повсеместно.
Ответ написан
@abcd0x00
Допустим самой камере для работы нужен общий класс для всех камер OutputBuffer

То, что он общий, ничего не значит. Работать с ним надо так, будто он индивидуальный для каждой камеры.
Передаёшь его каждой камере при её инициализации. А уже готовая камера (которая знает, куда выводить) добавляется в список камер.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы