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的引用,因为。在我将它们移动到头文件后,它会工作。谢谢你的建议和链接!