我有一个应用程序需要将异构数据打包到单个结构中。例如,单个结构可能包含三个浮点数,两个整数和一个字符串。我不知道在运行之前我将拥有哪些字段,关键要求是该过程非常快。我打算使用一个void *数组,当消息到达目的地时,我可以将其转换为适当的类型,但是有更好的方法吗?也许使用Boost?
答案 0 :(得分:7)
也许boost_variant会满足您的需求?
答案 1 :(得分:2)
你能使用普通的union吗?
答案 2 :(得分:1)
我遇到了同样的问题。我的解决方案是定义一个名为Data的接口。除了虚拟析构函数之外,此接口不提供任何其他内容。 我的所有数据类型现在都继承自Data接口。这允许我定义数据指针的向量。当我需要它们时,我将它们转换为实际类型,以便我可以使用它们。
此解决方案通过使用标记类来避免使用void Pointers。
// Marker interface
class Data {
public:
virtual ~Data()=0;
}
// Own Datatype
class MyDataType: public Data {
...
}