Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;函数模板部分专门化_C++_Templates_Partial Specialization - Fatal编程技术网

C++ C++;函数模板部分专门化

C++ C++;函数模板部分专门化,c++,templates,partial-specialization,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); //模板 模板 T*新(无效); 模板 T*NewArray(无符号整数);

基本上,我实现了自己的内存分配函数
Malloc()
,这是

void Malloc(size_t size);
现在我想实现我自己的New和NewArray函数,我声明这两个函数如下:

// template 
  template <class T>
  T* New(void);
  template <class T>
  T* NewArray(unsigned int num);
//模板
模板
T*新(无效);
模板
T*NewArray(无符号整数);
具体实施包括:

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);
}
模板
T*MemPool::New()
{
返回(T*)Malloc(sizeof(T));
}
模板
T*MemPool::NewArray(unsigned int num)
{
if(num<0)
返回NULL;
返回(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)
MP.cpp:482:20:错误:不允许函数模板部分专门化“新建”
T*MemPool::New()
^
MP.cpp:488:41:错误:不允许函数模板部分专用化“NewArray”
T*MemPool::NewArray(unsigned int num)
您在这里有一个额外的

template <class T>
T* MemPool::New<T>()
//             ^^^
模板
T*MemPool::New()
//             ^^^
应该是:

template <class T>
T* MemPool::New()
模板
T*MemPool::New()

如果(num<0)这是不可能的。^现在如果有人写
NewArray(-1)
num
将等于
UINT\u MAX
。谢谢!编译通过了,但是如果我使用这两个函数,比如int p2=mp->New();char*p3=mp->NewArray(10);它还有另一个编译问题:未定义对`int MemPool::New()'@MartinGGWW的引用,因为。在我将它们移动到头文件后,它会工作。谢谢你的建议和链接!