在C ++中避免void *

时间:2011-11-22 23:41:35

标签: c++

我有一个应用程序需要将异构数据打包到单个结构中。例如,单个结构可能包含三个浮点数,两个整数和一个字符串。我不知道在运行之前我将拥有哪些字段,关键要求是该过程非常快。我打算使用一个void *数组,当消息到达目的地时,我可以将其转换为适当的类型,但是有更好的方法吗?也许使用Boost?

3 个答案:

答案 0 :(得分:7)

也许boost_variant会满足您的需求?

http://www.boost.org/doc/html/variant.html

答案 1 :(得分:2)

你能使用普通的union吗?

答案 2 :(得分:1)

我遇到了同样的问题。我的解决方案是定义一个名为Data的接口。除了虚拟析构函数之外,此接口不提供任何其他内容。 我的所有数据类型现在都继承自Data接口。这允许我定义数据指针的向量。当我需要它们时,我将它们转换为实际类型,以便我可以使用它们。

此解决方案通过使用标记类来避免使用void Pointers。

// Marker interface
class Data {
     public:
           virtual ~Data()=0;
}
// Own Datatype
class MyDataType: public Data {
     ...
}