【发布时间】:2017-05-30 05:37:46
【问题描述】:
我有一个与消息总线一起使用的Message 结构,我想用消息发送数据。问题是数据的类型会有所不同;也许对于一条消息,我只想发送一个 int,但对于另一条消息,我想发送几个 int、一个字符串,甚至可能是一个指向对象的指针。我可以做这样的事情:
struct Message {
std::map<int, int> intPayload;
std::map<int, std::string> strPayload;
short id;
};
但这不仅丑陋且不干净,而且可能会浪费空间,而且如果我想传递一个相对奇特的数据类型,例如指向类实例的指针,这并不能解释。我应该为此使用什么?
【问题讨论】:
-
使用继承和指向基类和虚函数的指针?
-
如果可能的话,我的第一个猜测是多态性。
-
@DeiDei 我有点困惑,根据我的理解,多态性与类/结构继承有关,多态性在这里有什么帮助?
-
或者你们两个都建议我创建一个
Message结构、一个MessageString结构和一个MessageStringNoInt结构等等?? -
如果你知道所有可能的类型,
std::variant或boost::variant通常是合适的。
标签: c++ stl containers std message-bus