避免c++中的void*
Avoiding void* in C++
我有一个应用程序,它需要将异构数据打包到单个结构中。例如,一个结构体可能包含三个浮点数、两个整数和一个字符串。直到运行时我才知道我将拥有哪些字段,关键要求是该过程非常快。我计划使用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 {
...
}
相关文章:
- 我应该使用什么来代替void作为变体中的替代类型之一
- void*到驱动程序中的UnicodeString
- 为什么 c++ 中的 main() 函数不采用除 int 和 void 之外的任何其他返回类型
- C++命名空间中调用 void 函数的错误
- 处理模板函数包装中的void返回
- 指针中的Void*有什么用
- void 函数中的指针参数返回不一致的值
- 退出c++中的递归void方法
- 函数 LNK2019 "int __cdecl __scrt_common_main_seh(void)" 中引用的未解析外部符号主错误 (?__scrt_common_main_seh@@YAHXZ
- 代码行 1 中的"(void)"有什么用?
- 如果 return 语句在带括号的循环中,错误可能会到达非 void 函数的末尾,但不会显示在没有括号的循环的情况下
- 对 C++ 中的特定标头使用 extern C 关键字是否允许从 void* 转换为 char*?
- 指向派生类的指针中的"static_cast<Base*>(static_cast<void*>(派生))"何时有效?
- 如何从平面缓冲区中反序列化联合结构的 void* 值的大小
- 如何通过c 中的void*的字节迭代
- 如何通过使用void中的变量中传递信息
- 'auto f(params) -> decltype(..., void())' 中的 'void()' 是做什么的?
- C++中存储在void中的值是多少
- decltype(void())中的void()到底是什么意思?
- c++访问void*中的特定地址