Rav*_*ven 2 c++ void-pointers static-cast unions
我正在编写代码,直到现在我正在使用这样的结构:
struct s{
enum Types { zero = 0, one, two };
unsigned int type;
void* data;
}
Run Code Online (Sandbox Code Playgroud)
我需要一些通用的结构来存储来自不同类的数据,我想在std :: vector中使用它,这就是为什么我不能使用模板的原因.什么是更好的选择:工会或无效指针?
Void指针只分配我需要的空间,但是由于某些原因,c ++是强类型语言,并且我需要使用这些数据的地方不是c ++代码应该设计的方式.正如我所读到的,除非别无选择,否则不应使用void指针.
这个替代方案可能是工会.它们带有c ++,并为每个成员使用相同的内存空间,非常类似于void指针.然而,它们的价格是合理的 - 分配的空间是联合中最大元素的大小,在我看来,大小之间的差异很大.
这是相当风格和"正确的语言使用"问题,因为这两种方式完成了我需要做的事情,但我不能确定好的程式化的c ++代码是否可以为浪费的内存付出代价(尽管这些日子的内存不是很大)关心).
考虑boost::any或者boost::variant是否要存储异构类型的对象.
在决定使用哪一个之前,先看看比较:
希望它能帮助您做出正确的决定.选择一个,以及从任何标准库容器的存储对象,std::vector<boost::any>, std::vector<boost::variant>,或任何其他.