如何在单个 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 };
我正在编写的程序要求我实现特定代码,以便存储在向量中的每个 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 };