在C ++中,假设我有一个模板化的类,比如
template <typename T>
class Foo
{
...
};
并假设我有几种Foo对象,比如
Foo<int> intFoo = Foo<int>();
Foo<double> doubleFoo = Foo<double>();
...
等等。
实际上,它比那更糟糕。我真的想要一个继承自Foo&lt;的类的intFoo对象。例如,int&gt ;.
我想做这样的事情:
std::vector<Foo<?> > aVector;
aVector.push_back(intFoo);
aVector.push_back(doubleFoo);
请记住,我的设计案例大大过分了,有一种简单的方法吗?
答案 0 :(得分:1)
Foo<int>
和Foo<double>
是2个不同的类,尽管它们共享名称Foo
,因此您不能将它们按原样放入vector
。但您可以使用boost::variant
并存储变体向量。
答案 1 :(得分:1)
解决方案是让您的Foo继承自空基类
struct CommonBase {};
template<typename T>
class Foo : public CommonBase
{
// ...
};
然后有一个指向公共基础的指针容器
vector<CommonBase*> v;
如果您想远离继承,可以使用boost:any
在容器中存储任何类型。
要研究的一个有趣话题(如果你想手动实现这类事情)是类型擦除