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

C++ 如何在一个向量中存储具有不同数据类型的对象,c++,vector,stl,C++,Vector,Stl,我完全搞不懂如何在一个向量中存储具有不同数据类型的对象。 例如,我有一个带有某些特定数据的Class1和另一个数据的Class2。我需要按照它们被创建的顺序将它们放入向量中。有可能吗 以下是一些备选方案 如果要存储的不同数据类型是POD类型,则可以创建一个联合来存储它们 union u { int intvalue; double double value; } vector<u> vec; union u{ int值; 双重价值; } 向量向量机; 还可以通过

我完全搞不懂如何在一个向量中存储具有不同数据类型的对象。
例如,我有一个带有某些特定数据的Class1和另一个数据的Class2。我需要按照它们被创建的顺序将它们放入向量中。有可能吗

以下是一些备选方案

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

union u {
    int intvalue;
    double double value;
}

vector<u> vec;
union u{
int值;
双重价值;
}
向量向量机;
还可以通过联合存储指向不同类型实例的指针

像这样使用联合的一个缺点是,您需要知道每个实例中实际存储的类型

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

class base {
...
}

class d1 : base {
...
}

vector<base*> vec;

vec.push_back((base*)new d1());
类基{
...
}
d1类:基础{
...
}
向量向量机;
向量向后推((基*)新d1());

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

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

union u {
    int intvalue;
    double double value;
}

vector<u> vec;
union u{
int值;
双重价值;
}
向量向量机;
还可以通过联合存储指向不同类型实例的指针

像这样使用联合的一个缺点是,您需要知道每个实例中实际存储的类型

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

class base {
...
}

class d1 : base {
...
}

vector<base*> vec;

vec.push_back((base*)new d1());
类基{
...
}
d1类:基础{
...
}
向量向量机;
向量向后推((基*)新d1());

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

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

union u {
    int intvalue;
    double double value;
}

vector<u> vec;
union u{
int值;
双重价值;
}
向量向量机;
还可以通过联合存储指向不同类型实例的指针

像这样使用联合的一个缺点是,您需要知道每个实例中实际存储的类型

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

class base {
...
}

class d1 : base {
...
}

vector<base*> vec;

vec.push_back((base*)new d1());
类基{
...
}
d1类:基础{
...
}
向量向量机;
向量向后推((基*)新d1());

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

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

union u {
    int intvalue;
    double double value;
}

vector<u> vec;
union u{
int值;
双重价值;
}
向量向量机;
还可以通过联合存储指向不同类型实例的指针

像这样使用联合的一个缺点是,您需要知道每个实例中实际存储的类型

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

class base {
...
}

class d1 : base {
...
}

vector<base*> vec;

vec.push_back((base*)new d1());
类基{
...
}
d1类:基础{
...
}
向量向量机;
向量向后推((基*)新d1());

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

向量只能存储单一类型的元素。如果有继承自同一基类的类,则可以存储指向该基类的指针,但我认为这不是您尝试的do@IvayloStrandjev是的,这就是为什么我对
boost::variant
感到困惑的原因。创建一个
结构
并将
class1
class2
的指针存储在此
结构
中,然后为该结构创建一个
向量
。向量只能存储单一类型的元素。如果有继承自同一基类的类,则可以存储指向该基类的指针,但我认为这不是您尝试的do@IvayloStrandjev是的,这就是为什么我对
boost::variant
感到困惑的原因。创建一个
结构
并将
class1
class2
的指针存储在此
结构
中,然后为该结构创建一个
向量
。向量只能存储单一类型的元素。如果有继承自同一基类的类,则可以存储指向该基类的指针,但我认为这不是您尝试的do@IvayloStrandjev是的,这就是为什么我对
boost::variant
感到困惑的原因。创建一个
结构
并将
class1
class2
的指针存储在此
结构
中,然后为该结构创建一个
向量
。向量只能存储单一类型的元素。如果有继承自同一基类的类,则可以存储指向该基类的指针,但我认为这不是您尝试的do@IvayloStrandjev是的,这就是为什么我对boost::va感到困惑