【发布时间】:2011-10-31 05:27:53
【问题描述】:
我正在编写代码,直到现在我都在使用这样的结构:
struct s{
enum Types { zero = 0, one, two };
unsigned int type;
void* data;
}
我需要一些通用结构来存储来自不同类的数据,并且我想在 std::vector 中使用它,所以这就是我不能使用模板的原因。更好的选择:联合还是空指针?
Void 指针只分配我需要的空间,但由于某种原因,c++ 是强类型语言,并且在我需要使用这些数据的任何地方进行强制转换并不是 c++ 代码的设计方式。正如我所读到的,除非别无选择,否则不应使用 void 指针。
那个替代方案可能是工会。它们与 c++ 一起提供,并且为每个成员使用相同的内存空间,非常类似于 void 指针。然而,它们是有代价的——分配的空间是联合中最大元素的大小,在我的情况下,大小之间的差异很大。
这是一个相当风格和“正确使用语言”的问题,因为这两种方法都可以完成我需要做的事情,但我无法确定精美风格化的 c++ 代码是否可以弥补浪费的内存(尽管这些天的内存不是' t 一个大问题)。
【问题讨论】:
-
如果您不想在保持安全的同时进行非严格类型检查,那么 c++ 可能不是这项工作的语言。看看 C#。
-
您可以使用模板。只需创建一个具有所需接口的基类并存储指针。
-
@Dani 我正在编写跨平台可移植代码 + 它从另一个 c++ 库中获取许多功能,因此 C# 不是一个选择。 (不提将整个代码移植到 C# 会导致我放弃项目)
-
您只是在现有的类型系统之上添加自己的类型系统。有什么优势?
标签: c++ void-pointers static-cast unions