0

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

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

4

2 回答 2

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);
}
于 2012-12-12T17:06:58.927 回答
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;

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

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

于 2012-12-12T17:09:51.840 回答