c++ - 参数化对象的 vector

标签 c++ templates

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

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

最佳答案

你可以导出 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);
}

关于c++ - 参数化对象的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13844881/

相关文章:

c++ - 创建 is_primitive 或 is_inheritable 模板

c++ - 将不同的 vector <*>混合成一个 vector

c# - 使用 Visual Studio 内置的 ASP.NET MVC 模板

C++ Templated Functor (based on Modern C++ Design)编译错误

c++ - 使用 foreach 语法进行迭代时如何检查我是否在最后一个元素上

c++ - 如何在安装了 WSL 的 Visual Studio Code 中修复 "g++: error: helloworld.cpp: No such file or directory"?

c++ - 通过包含模板的继承链的 static_cast 将无法编译

c++ - 变量模板的链接器错误

c++ - 使用 boost::filesystem::last_write_time 获取锁定文件夹的修改时间

c++ - 从 vector < vector <字符串>>中删除重复值,不区分大小写?由 小码哥发布于