Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;:任意模板类型的容器 在C++中,假设我有一个模板化的类,比如 template <typename T> class Foo { ... }; 模板 福班 { ... };_C++_Templates_Inheritance_Containers - Fatal编程技术网

C++;:任意模板类型的容器 在C++中,假设我有一个模板化的类,比如 template <typename T> class 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对象,比如

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

事实上,比这更糟。例如,我确实需要一个从Foo继承的类的intFoo对象

我想这样做:

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

std::vector
Foo
Foo
是两个不同的类,尽管它们共享名称
Foo
,因此不能将它们按原样放在
vector
中。但是您可以使用
boost::variant
并存储变量向量。

解决方案是让您的Foo从空基类继承

struct CommonBase {};

template<typename T>
class Foo : public CommonBase
{ 
    // ... 
};
struct CommonBase{};
模板
Foo类:公共公共基础
{ 
// ... 
};
然后有一个指向公共基的指针容器

vector<CommonBase*> v;
向量v;
如果您不想继承,可以使用
boost:any
在容器中存储任何类型

一个有趣的话题是类型擦除