基本上我实现了自己的内存分配函数Malloc()
,即
void Malloc(size_t size);
现在我想实现我自己的 New 和 NewArray 函数,我像这样声明这两个函数:
// template
template <class T>
T* New(void);
template <class T>
T* NewArray(unsigned int num);
实现是:
template <class T>
T* MemPool::New<T>()
{
return (T *)Malloc(sizeof(T));
}
template <class T>
T* MemPool::NewArray<T>(unsigned int num)
{
if(num < 0)
return NULL;
return (T*) Malloc(sizeof(T) * num);
}
但是编译失败:
MP.cpp:482:20: error: function template partial specialization ‘New<T>’ is not allowed
T* MemPool::New<T>()
^
MP.cpp:488:41: error: function template partial specialization ‘NewArray<T>’ is not allowed
T* MemPool::NewArray<T>(unsigned int num)
最佳答案
您有一个额外的<T>
这里:
template <class T>
T* MemPool::New<T>()
// ^^^
应该是:
template <class T>
T* MemPool::New()
NewArray
也是如此.
关于C++ 函数模板部分特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28227532/