如何在一个向量中存储具有不同数据类型的对象

How to store objects with different datatypes in one vector

本文关键字:存储 对象 数据类型 向量 一个      更新时间:2023-10-16

我对在一个向量中存储具有不同数据类型的对象的方式完全感到困惑。例如,我有带有一些指定数据的类 1 和带有另一个数据的类 2。我需要按照它们的创建顺序将它们放入矢量中。有可能做到吗?

这里有一些替代方案。

如果要存储的不同数据类型是 POD 类型,则可以创建联合来存储它们。

union u {
    int intvalue;
    double double value;
}
vector<u> vec;

您还可以通过联合存储指向不同类型实例的指针。

使用这样的联合的一个缺点是,您需要某种方法来知道每个实例中实际存储的类型。

或者,如果要存储对象,

可以将对象排列为全部从公共基类继承,然后在堆上分配类的实例,并存储指向向量中实例的指针。根据对象的使用方式,您必须强制转换指针和/或使用虚拟方法来调用对象上的方法。

class base {
...
}
class d1 : base {
...
}
vector<base*> vec;
vec.push_back((base*)new d1());

或者你可以使用boost.variant。这可以说是最好的方法,因为与我提到的其他方法相比,它是类型安全的。