在 C++ 中,假设我有一个模板化类,例如
template <typename T>
class Foo
{
...
};
假设我有几种 Foo 对象,比如
Foo<int> intFoo = Foo<int>();
Foo<double> doubleFoo = Foo<double>();
...
等等。
实际上,它比那更糟。例如,我真的想要一个继承自 Foo
我想做这样的事情:
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/