使用“队列”时可以替代向下转换吗?

时间:2019-03-19 07:40:08

标签: c++ pointers inheritance casting

我有一个队列(为简单起见,这里只是一个变量),里面存放着各种消息。

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 :(得分:0)

好像是双重调度是解决问题的方法。基本上,它只是一种访客调用方式的访客模式。如果您有兴趣,请查看以下链接:

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

Double dispatch/multimethods in C++