我完全混淆了在一个向量中存储具有不同数据类型的对象的方式。 例如,Class1有一些指定数据,Class2有另一个。我需要按创建顺序将它们放入向量中。有可能吗?
答案 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。这可以说是最好的方法,因为与我提到的其他方法相比,它是类型安全的。