C++ 函数模板部分特化

标签 c++ templates partial-specialization

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

相关文章:

c++ - 使用带有 bitset 的 initializer_list

c++ - 将 std::partition 推广到 multi_partition

c++ - 部分模板参数应用程序的部分模板特化不适用于 GCC 4.8.1

C++:部分模板特化

c++ - 为什么这个片段没有产生输出

c++ - SQLite3 多进程性能测试

c++ - 如何将 QVariant 转换为 QJsonValue?

c++ - 向前声明一个内部类类型,可以吗?

c++ - 提供可变参数模板 : candidate expects 1 argument, 0(推导错误)

c++ - 函数类型不是模板非类型参数的有效类型?