gpt4 book ai didi

c++ - union 与 static_cast(void*)

转载 作者:搜寻专家 更新时间:2023-10-31 00:02:56 24 4
gpt4 key购买 nike

我正在编写代码,直到现在我一直在使用这样的结构:

struct s{
enum Types { zero = 0, one, two };
unsigned int type;
void* data;
}

我需要一些通用结构来存储来自不同类的数据,并且我想在 std::vector 中使用它,所以这就是我不能使用模板的原因。哪个更好的选择: union 还是空指针?

Void 指针只分配我需要的空间,但出于某种原因,c++ 是强类型语言,在我需要使用这些数据的任何地方进行强制转换并不是 c++ 代码的设计方式。正如我所读,除非别无选择,否则不应使用 void 指针。

替代方案可能是 union 。它们随 c++ 一起提供,并为每个成员使用相同的内存空间,非常像 void 指针。然而,它们是有代价的——分配的空间是 union 中最大元素的大小,在我的例子中,大小之间的差异很大。

这是一个相当风格化和“正确使用语言”的问题,因为这两种方式都完成了我需要做的事情,但我无法确定风格化良好的 C++ 代码是否可以弥补浪费的内存(即使现在的内存不是这不是一个大问题)。

最佳答案

考虑 boost::any boost::variant 如果你想存储异构类型的对象。

在决定使用哪一个之前,先看看比较:

希望它能帮助您做出正确的决定。选择一个,以及标准库中的任何容器来存储对象,std::vector<boost::any> , std::vector<boost::variant> ,或任何其他。

关于c++ - union 与 static_cast(void*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7132248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com