如何在单个 array/vector 中存储不同的 class 对象?

How to store different class objects in a single array/vector?

我正在编写的程序要求我实现特定代码,以便存储在向量中的每个 class 实例都可以在单个数组或向量中访问。问题是实例属于不同的 classes 并且不能单独存储在单个 array/vector 中。有什么办法可以做到这一点吗?我实现了下面的代码,但不幸的是我收到了一条错误消息,我似乎无法摆脱它。

class A {...}; //abstract

class B : public A {...};
class C : public A {...};
class D : public A {...};
class E : public A {...};

vector <B> vecb;
vector <C> vecc;
vector <D> vecd;
vector <E> vece;
vector <A*> mainvec = { vecb, vecc, vecd, vece };

这是我得到的错误:

Severity    Code    Description Project File    Line    Suppression State
Error (active)  E0289   no instance of constructor "std::vector<_Ty, _Alloc>::vector [with _Ty=A *, _Alloc=std::allocator<A *>]" matches the argument list       

vector <A*> mainvec = { vecb, vecc, vecd, vece };

这永远行不通。 mainvec 期望保存原始 A* 指针,但您正试图将对象向量传递给它。

如果你真的想要一个向量来保存其他类型的向量,你可以使用 std::variant,例如:

std::vector<B> vecb;
std::vector<C> vecc;
std::vector<D> vecd;
std::vector<E> vece;

using VariantOfVectors = std::variant< std::vector<B>*, std::vector<C>*, std::vector<D>*, std::vector<E>* >;

std::vector<VariantOfVectors> mainvec = { &vecb, &vecc, &vecd, &vece };