C++以任何方式将不同的模板化对象存储到同一个容器中

JP.*_*JP. 4 c++ templates

有什么黑客我可以用来做到这一点:

template <class TYPE>
class Hello
{
     TYPE _var;
};
Run Code Online (Sandbox Code Playgroud)

我想要一种存储方式

Hello<int> intHello and Hello<char*> charHello
Run Code Online (Sandbox Code Playgroud)

进入同一个容器,如队列/列表.

Jam*_*lis 10

不,因为它们是不同的,完全不相关的类型.

但是,您可以使用继承和智能指针:

class HelloBase 
{
public:
    virtual ~HelloBase(); 
}

template <class TYPE>
class Hello : public HelloBase
{
    TYPE _var;
}

std::vector<boost::shared_ptr<HelloBase> > v;
Run Code Online (Sandbox Code Playgroud)

shared_ptr您的实现可以在std::tr1std命名空间中支持; 你必须检查.


Jer*_*fin 5

是的,有点 - 但你可能不想.尽管他们来自同一个模板开始,Hello<int>并且Hello<char *>是完全独立的和无关的类型.包含两者的集合是异构的,包含所有需要的问题.

如果你坚持这样做,为了合理地干净利落,你通常会创建像队列/列表一样的东西Boost::any.