我对在一个 vector 中存储具有不同数据类型的对象的方式感到非常困惑。 例如,我有一些指定数据的 Class1 和另一个数据的 Class2。我需要按照它们的创建顺序将它们放入 vector 中。有可能做到吗?
最佳答案
这里有一些选择。
如果你要存储的不同数据类型是POD类型,你可以创建一个union来存储它们。
union u {
int intvalue;
double double value;
}
vector<u> vec;
您还可以通过 union 存储指向不同类型实例的指针。
像这样使用 union 的一个缺点是您需要某种方式来了解每个实例中实际存储的是什么类型。
或者如果你想存储对象,你可以安排你的对象都继承自一个公共(public)基类,然后在堆上分配你的类的实例并将指向实例的指针存储在 vector 中。根据您的对象的使用方式,您将不得不转换指针和/或使用虚拟方法来调用对象上的方法。
class base {
...
}
class d1 : base {
...
}
vector<base*> vec;
vec.push_back((base*)new d1());
或者您可以使用 boost.variant .这可以说是最好的方法,因为与我提到的其他方法相比,它是类型安全的。
关于c++ - 如何在一个 vector 中存储具有不同数据类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22091339/