如何在单个数组/向量中存储不同的类对象



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

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 };

最新更新