Альтернатива даункастингу при использовании «очередей»? - PullRequest
1 голос
/ 19 марта 2019

У меня есть очередь (здесь для упрощения: только одна переменная), содержащая различные виды сообщений.

InboxMessage inbox_queue_;

Несколько потоков / классов могут записывать сообщения в эту очередь. Класс-потребитель читает их и обрабатывает в зависимости от типа прочитанного сообщения.

class StatusMessage : public InboxMessage { 
public:
  std::string getStatus();
  std::string getTimestamp();
  // ...
};

class RandomMessage : public InboxMessage { 
public:
  std::string getCode();
  int getCount();
  // ...   
};

Производные классы содержат различные виды атрибутов, к которым необходимо обращаться при обработке сообщения.

Мой вопрос таков: есть ли способ избежать принижения класса потребителей в этом сценарии? Следует ли этого избегать любой ценой (если да, то как?).

Я использую dynamic_cast, чтобы убедиться, что программа проверяет, является ли приведение действительным, и могу ли я реагировать на неудачные приведения.

Заранее спасибо!

1 Ответ

0 голосов
/ 19 марта 2019

Похоже, двойная отправка - это путь сюда.Это в основном шаблон посетителя с одним видом вызова посетителя.Посмотрите на эти ссылки, если вам интересно:

https://en.wikipedia.org/wiki/Double_dispatch

Двойная отправка / мультиметоды в C ++

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...