是否有任何黑客,我可以用它来做到这一点:C++任何方式不同的模板对象存储到同一容器
template <class TYPE>
class Hello
{
TYPE _var;
};
我想一种方法来存储
Hello<int> intHello and Hello<char*> charHello
到同容器,如队列/列表。
是否有任何黑客,我可以用它来做到这一点:C++任何方式不同的模板对象存储到同一容器
template <class TYPE>
class Hello
{
TYPE _var;
};
我想一种方法来存储
Hello<int> intHello and Hello<char*> charHello
到同容器,如队列/列表。
不,因为它们是不同的,完全不相关的类型。
你可以,但是,使用继承和智能指针:
class HelloBase
{
public:
virtual ~HelloBase();
}
template <class TYPE>
class Hello : public HelloBase
{
TYPE _var;
}
std::vector<boost::shared_ptr<HelloBase> > v;
shared_ptr
可以通过您的实现无论是在std::tr1
或std
命名空间的支持;你必须检查。
是的,有点 - 但你可能不想。尽管它们从相同的模板开始,但是Hello<int>
和Hello<char *>
是完全独立和不相关的类型。包含两者的集合是异构的,包含所有的问题。
如果你仍然坚持这样做,要合理干净地做到这一点,你通常会创建一个队列/列表Boost::any
。
首先,真正的问题是:你想要达到什么(在更高的层次上)?
现在,对于这个特殊的问题有很多的选择。容器不能存储异构数据,使您可以:
unique_ptr
或boost::ptr_list
将是巨大的)boost::variant
,它的静态检查,所以你有合理的保证boost::any
在底层存储类在这种情况下,通用的基类是通常的方法。如果没有理由具有多态性,那么最好使用variant
,如果没有别的,则使用any
。
我认为这是一个非常好的答案。我错过了其他的变体。似乎是首选的方式。 – 2010-05-31 11:49:49
你试图用这个做什么最终结果? – 2010-05-04 15:09:14