2011-01-13 17 views
0

對不起這個奇怪的話題,但不知道如何正確綜合我的問題。這裏是問題:你如何處理這個問題(界面+模板+重用代碼)

我有一組類將包含類型的std :: vector。這是一個很好的候選人只是templatizing喜歡:

template <typename T> 
class Container 
{ 
    T createObject() { T* obj=new T; _objects.push_back(obj); } 
    std::vector<T> _objects; 
} 

問題是當我需要這個容器存儲在一個異構的地圖。它們是一個模板,因此在初始化之前它們不存在。我曾考慮過從一個虛擬IContainer派生Container以獲得一個良好的起點,但正如您所看到的,createObject需要模板化,所以我可以將IContainers添加到hetrogenous地圖,但是我無法調用createObject()並不想做一個static_cast。任何人都可以爲此提出解決方案嗎?

在此先感謝, 阿馬拉爾。

+5

該代碼沒有任何意義。假設`createObject`返回一個`T`,但沒有返回語句,`_objects`存儲`T`,但是你嘗試給它添加`T *`。 – GManNickG 2011-01-13 17:05:19

回答

0

這聽起來像你可能會像boost::any之後。見http://www.boost.org/doc/libs/1_49_0/doc/html/any/s02.html

總結:

class Container 
{ 
    std::vector<boost::any> _objects; 

public: 
    template <class T> 
    void Add(const T& t) { _objects.push_back(t); } 
} 

您將不再需要到模板類,在你的情況下,只需添加功能。

請注意,因爲您不知道它們是什麼類型,因此很難處理矢量中的對象 - 只要您想使用它們,您就必須測試以確定其類型。

你需要更好地解釋你正在嘗試做什麼 - 但我猜你會做而不是想要實際使用boost::any

相關問題