繁体   English   中英

在C ++中避免void *

[英]Avoiding void* in C++

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

也许boost_variant会满足您的需求吗?

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

你能用简单的旧联盟吗?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM