参数对象矢量

时间:2012-12-12 17:04:35

标签: c++ templates

我想创建一个参数类型的对象矢量,其中每个对象具有不同的专用类型。例如:

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)中未指定模板参数。如何创建具有此特征的矢量?

2 个答案:

答案 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;

但请注意,这不允许您从矢量访问对象的模板部分。

您需要弄清楚哪些(如果有的话)适合您要解决的问题。