C++函数模板部分专用化

C++ function template partial specialization

本文关键字:专用 函数模板部 C++      更新时间:2023-10-16

基本上我实现了自己的内存分配函数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也是如此.