我想创建一个参数类型对象的向量,其中每个对象都有不同的特殊类型。例:

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

最佳答案

您可以从常见的非模板类派生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);
}

08-05 07:19