我想创建一个参数类型的对象矢量,其中每个对象具有不同的专用类型。例如:
template<typename A>
struct BaseAtom
{
A _a;
};
struct AtomA : BaseAtom<int>
{};
int main()
{
std::vector<BaseAtom*> v; // (1)
AtomA a;
v.push_back(&a);
}
并且逻辑上,这不起作用,因为BaseAtom是模板类型,并且(1)中未指定模板参数。如何创建具有此特征的矢量?
答案 0 :(得分:4)
您可以从一个常见的非模板化类派生BaseAtom<A>
,并存储指向该类的指针:
struct Base {};
template<typename A>
struct BaseAtom: Base
{
A _a;
};
struct AtomA : BaseAtom<int>
{};
int main()
{
std::vector<Base*> v; // (1)
AtomA a;
v.push_back(&a);
}
答案 1 :(得分:2)
选择模板的一些特化以放入向量:
std::vector<BaseAtom<int>*> v;
或定义非模板基类:
struct BaseAtomBase {}; // put anything independent of the template parameter here
template <typaname A>
struct BaseAtom : BaseAtomBase
{
A _a;
};
std::vector<BaseAtomBase*> v;
但请注意,这不允许您从矢量访问对象的模板部分。
您需要弄清楚哪些(如果有的话)适合您要解决的问题。