【发布时间】:2012-11-07 20:25:40
【问题描述】:
注意:我知道之前有人在 SO 上提出过类似的问题,但我没有发现它们有帮助或很清楚。
第二点:对于这个项目/任务的范围,我尽量避免使用第三方库,例如 Boost。
我正在尝试查看是否有一种方法可以让单个向量在其每个索引中保存多种类型。例如,假设我有以下代码示例:
vector<something magical to hold various types> vec;
int x = 3;
string hi = "Hello World";
MyStruct s = {3, "Hi", 4.01};
vec.push_back(x);
vec.push_back(hi);
vec.push_back(s);
我听说vector<void*> 可以工作,但是内存分配会变得很棘手,如果插入某个索引的值大于预期,附近内存中的某些部分总是可能会被无意覆盖.
在我的实际应用中,我知道可以将哪些可能类型插入到向量中,但是这些类型并不都派生自同一个超类,也不能保证所有这些类型将被推到向量上或以什么顺序。
有没有一种方法可以安全地实现我在代码示例中展示的目标?
感谢您的宝贵时间。
【问题讨论】:
-
@chris 抱歉,我不清楚。对于这个项目/任务的范围,我试图避免使用第三方库。我已经更新了我的问题。
-
好吧,我不知道它的效果如何,但你可以拥有一个包含
type成员和所有可能类型联合的结构。 -
如果您强制要求您无法知道实际推送的是什么,我们可以假设这个向量除了指针之外不拥有任何东西吗?如果没有在所有者级别建立类型信息的某种方式,您在正确管理清理或擦除方面会有些麻烦。带有指针+析构函数引用的结构体是可以想象的,但到时候你就得开始问自己这里服务的真实数据模型是什么?
-
你真的想要完全随机的数据,还是这些有某种关系?如果存在某种类型层次结构,您可以存储指向它们共享的更通用类型的指针,并且可以使用
shared_ptr来减少内存混乱。 -
@BrendanLong 假设这个向量将从成员函数返回,那么像你所说的指针真的可能吗?
标签: c++ memory-management types vector