2017-05-24 126 views
0

Pool類模板,讓說的類似:C++類模板專門變量

template <class T> 
class Pool { 
public: 
    static int iPoolUpperBound; 
    static int iPoolSize; 
    static T **pItem; 
    T(); 
    ~T(); 
} 

當我需要的對象池某一類我只需要使用模板。我也有Item類,而我需要載體添加到當前Pool模板,但如果IM指/使用Item類載體應該是唯一的存在。

簡單if (T == Item)不會工作,這是顯而易見的,我已經給我的最好的是矢量有條件地添加到Pool模板

這也將是有益的,如果我能有條件在Pool類模板成員函數添加一行或兩行而不會超載它。

+0

我不明白你的問題,對不起。你想創建一個可以使用_placement'new()'_創建的'T'項目池嗎?你真的想解決什麼問題? [編輯](https://stackoverflow.com/posts/44170172/edit)你的問題,我們不能讀你的大腦。 –

+0

如果它們不同,那麼它很難稱爲模板,對吧?但是,你爲什麼不簡單地去'class SpecialPool:public Pool {vector vec; }'?這將是正確的精神。 – Aziuth

回答

0

如果我可以有條件地在Pool類模板成員函數中添加一行或兩行而不重載它,這也會有幫助。

舉例來說,您只能重載pItem

struct Item 
{ }; 

template <typename> 
struct proItem 
{ }; 

template <> 
struct proItem<Item> 
{ static Item ** pItem; }; 

Item ** proItem<Item>::pItem; 

template <typename T> 
struct Pool : public proItem<T> 
{ 
    static int iPoolUpperBound; 
    static int iPoolSize; 
}; 


int main() 
{ 
    Pool<Item>::pItem = nullptr; // compile 
    //Pool<int>::pItem = nullptr; // compilation error 
}