C++函数模板部分专用化
C++ function template 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++20 中是否不再允许在 std 中对程序定义类型的函数模板进行专用化?
- 如何减少函数模板专用化?
- 专用于类型集的函数模板
- 类成员函数的函数模板专用化
- 使用类指针重载C++命名空间函数模板专用化替代方法?
- 将 c++ 类成员函数专用于模板类
- 类和成员函数模板专用化出错
- C++ 模板化基类的函数模板专用化
- 如何使专用函数模板成为某个类的朋友?
- 函数模板(它是类模板的成员)的显式专用化会产生"partial specialization is not allowed"错误,为什么?
- 函数模板中的显式模板专用化不起作用
- C++函数模板专用化和重载
- 无法专用化函数模板'unknown-type std::invoke(_Callable &&,_Types &&...) noexcept(<expr>)'
- 函数模板专用化生成链接错误
- 视图和跨步视图以及常量噩梦的函数模板专用化
- 函数模板重载 - 部分专用化
- 64 位 G++ 4.6.3 不会在专用函数模板中将长整型视为长整型,即使它们的大小相同。这是一个错误吗?
- 为什么我不能专用函数模板?
- 专用函数模板