是否有任何黑客,我可以用它來做到這一點: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