C++:任意模板类型的容器

标签 c++ templates inheritance containers

在 C++ 中,假设我有一个模板化类,例如

template <typename T>
class Foo
{
    ...
};

假设我有几种 Foo 对象,比如

Foo<int> intFoo = Foo<int>();
Foo<double> doubleFoo = Foo<double>();
...

等等。

实际上,它比那更糟。例如,我真的想要一个继承自 Foo 的类的 intFoo 对象。

我想做这样的事情:

std::vector<Foo<?> > aVector;
aVector.push_back(intFoo);
aVector.push_back(doubleFoo);

请记住,我已经大大简化了我的设计案例,有没有一种简单的方法可以做到这一点?

最佳答案

一个解决方案是让你的 Foo 继承自一个空基类

struct CommonBase {};

template<typename T>
class Foo : public CommonBase
{ 
    // ... 
};

然后有一个指向公共(public)基础的指针容器

vector<CommonBase*> v;

如果你想避免继承,你可以使用 boost:any 在你的容器中存储任何类型。

要研究的一个有趣主题(如果您想手动实现此类操作)是类型删除

关于C++:任意模板类型的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23812603/

相关文章:

c++ - 模板特化取决于类型

c++ - 如何在 C++ 中从模板基类的构造函数调用模板父类(super class)的构造函数?

c++ - static_assert : a certain function in Derive "must" hides Base's class function

c++ - 创建不同对象的数组

c++ - 为什么我的 Eigen 代码不能随更多线程扩展

c++ - 部分成员函数模板特化和数据成员访问

python - PySide、PysideUIC 和多重继承

c++必须删除引用吗?

c++ - 如果图中只有一个循环,如何找到无向图中哪些顶点被循环?

c++ - 如何编写一个 C++ 函数,根据处理返回不同类型的 std::list?