В основном я реализую свою собственную функцию распределения памяти 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)
if(num < 0)
это невозможно. - person Neil Kirk   schedule 30.01.2015NewArray(-1)
,num
будет равноUINT_MAX
. - person emlai   schedule 30.01.2015