C++;:任意模板类型的容器 在C++中,假设我有一个模板化的类,比如 template <typename T> class Foo { ... }; 模板 福班 { ... };
假设我有几种Foo对象,比如C++;:任意模板类型的容器 在C++中,假设我有一个模板化的类,比如 template <typename T> class Foo { ... }; 模板 福班 { ... };,c++,templates,inheritance,containers,C++,Templates,Inheritance,Containers,假设我有几种Foo对象,比如 Foo<int> intFoo = Foo<int>(); Foo<double> doubleFoo = Foo<double>(); ... Foo intFoo=Foo(); Foo doubleFoo=Foo(); ... 等等 事实上,比这更糟。例如,我确实需要一个从Foo继承的类的intFoo对象 我想这样做: std::vector<Foo<?> > aVector; aVec
Foo<int> intFoo = Foo<int>();
Foo<double> doubleFoo = Foo<double>();
...
Foo intFoo=Foo();
Foo doubleFoo=Foo();
...
等等
事实上,比这更糟。例如,我确实需要一个从Foostd::vector<Foo<?> > aVector;
aVector.push_back(intFoo);
aVector.push_back(doubleFoo);
std::vectorFoo
和Foo
是两个不同的类,尽管它们共享名称Foo
,因此不能将它们按原样放在vector
中。但是您可以使用boost::variant
并存储变量向量。解决方案是让您的Foo从空基类继承
struct CommonBase {};
template<typename T>
class Foo : public CommonBase
{
// ...
};
struct CommonBase{};
模板
Foo类:公共公共基础
{
// ...
};
然后有一个指向公共基的指针容器
vector<CommonBase*> v;
向量v;
如果您不想继承,可以使用boost:any
在容器中存储任何类型
一个有趣的话题是类型擦除