c++ - 使用 "Queues"时替代向下转换?

标签 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 来确保程序检查转换是否有效并且我可以对错误的转换使用react。

提前致谢!

最佳答案

似乎双重分派(dispatch)是解决问题的方法。它基本上是只有一种访问者调用的访问者模式。如果您有兴趣,请查看这些链接:

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

Double dispatch/multimethods in C++

关于c++ - 使用 "Queues"时替代向下转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55235749/

相关文章:

c++ - 我可以更改将引用参数传递到指针的函数的输入并仍然使其工作(C、C++)吗?

c++ - 指针复制到范围外c++

c - 什么情况下应该使用函数签名void *(*)()?

c# - 如何始终调用C#类的最新字段

python - 继承在 Python 中实际上做了什么?

c++ - 根据特殊条件定义函数类型

c++ - pthread_cond_wait() 能否始终赢得锁定互斥体的竞争?

class - Fortran 指针多态性

python - 如何装饰子类中的继承方法?

c++ - Qt 使用未缩放的文本缩放自定义 QGraphicsItem