我正在尝试创建一个通用的容器,可以存储Wrapper< T>类型的异构对象,其中T可以是任何用户定义的类型。我已经看过boost::any和其他解决方案,但是如果不将其重新转换回原始类型,就无法调用函数foo()(我不知道要重新转换哪种类型,关于T的信息丢失了)。
如何合理地实现一个通用容器/使用现有的通用容器来实现这一点?
如何合理地实现一个通用容器/使用现有的通用容器来实现这一点?
template <typename T>
class Wrapper{
public:
Wrapper(const T& a):o(a){};
Wrapper(){};
//public methods
void foo(){
//do stuff
};
private:
T o;
};
class X{};
class Y{};
int main(){
X x;
Y y;
A_GENERIC_CONTAINER generic_container;
// A_GENERIC_CONTAINER should be able to store
// any number of heterogeneous objects of type Wrapper<T>
// where T can be any user defined type.
generic_container.push_back(x);
generic_container.push_back(y);
auto it = generic_container.begin();
auto end = generic_container.end();
while(it != end){
it->foo();
++it;
}
}