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

时间:2014-02-28 09:38:55

标签: c++ vector stl

我完全混淆了在一个向量中存储具有不同数据类型的对象的方式。 例如,Class1有一些指定数据,Class2有另一个。我需要按创建顺序将它们放入向量中。有可能吗?

1 个答案:

答案 0 :(得分:3)

以下是一些替代方案。

如果您要存储的不同数据类型是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。这可以说是最好的方法,因为与我提到的其他方法相比,它是类型安全的。