参数化对象的向量

Vector of parametric objects

本文关键字:向量 对象 参数      更新时间:2023-10-16

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

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

您可以从

一个常见的非模板化类派生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);
}

要么选择模板的一些专门化来放入向量:

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;

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

您需要找出其中哪些(如果有的话)适合您尝试解决的问题。