2017-05-24 97 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 
}