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

时间:2014-05-22 16:37:16

标签: c++ templates inheritance containers

在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);

请记住,我的设计案例大大过分了,有一种简单的方法吗?

2 个答案:

答案 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在容器中存储任何类型。

要研究的一个有趣话题(如果你想手动实现这类事情)是类型擦除