避免c++中的void*

Avoiding void* in C++

本文关键字:void 中的 c++ 避免      更新时间:2023-10-16

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

也许boost_variant将满足您的需求?

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

可以使用普通的旧式联合吗?

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

该解决方案通过使用标记类来避免使用void指针。

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