У меня есть класс C ++ A, который захватывает кадры из интерфейса CAN на микроконтроллере. Я пытаюсь реализовать другой класс B (и C и D ..), который использует кадры, захваченные классом A, один за другим. По сути, класс A перенаправляет захваченные кадры в один из классов из верхнего уровня в зависимости от содержимого кадра. Должен ли я реализовать какой-то механизм обработки событий (с которым я не очень знаком, будучи новичком в программировании), чтобы каждый раз при получении кадра происходило событие объекта верхнего уровня? Или тогда я могу добиться этого путем наследования класса B, C, … от класса A и так далее. Может ли кто-нибудь помочь мне развить здесь хорошую и простую логику?
Редактировать: Не очень хороший способ сделать это, чтобы у меня был оператор switch в классе A, а затем вызвать так называемый метод процесса одного из классов B, C, D, …. на основе значения регистра. Однако это не разумный способ, потому что теперь класс A использует классы B, C, D … и т. Д., Чего я не хочу. Класс A не должен знать о классах B, C, D, …..
например: класс А содержит std::list<B*>
где B — базовый класс с некоторыми virtual
метод обработчика. Несколько классов (C, D, E) наследуют класс B и перегружают этот метод. Затем вы просто добавляете экземпляры производных классов в список в A по указателю (например: std::list<B*> workers {new C, new D, new E};
) и вызовите перегруженный метод для каждого экземпляра. Каждый класс решает сам, принимает ли он текущий фрейм и обрабатывает его по-своему.
Вы можете взглянуть на Шаблон дизайна наблюдателя. В принципе, вы можете иметь наблюдаемый класс (в вашем случае class A
) и несколько наблюдателей (в вашем случае class B
class C
так далее). Наблюдатели будут регистрироваться в наблюдаемом классе для уведомления о событиях. У меня есть пример кода Модель EventInterface это позволяет соединения в стиле Qt между объектами. Все, что нужно приложению, — это связать событие наблюдаемого объекта с обработчиком события объекта-наблюдателя.