C++ 模板专门化方法
我有一个模板化的方法,我想添加一个专门化。对于函数,我将编写C++ 模板专门化方法,c++,templates,sfinae,C++,Templates,Sfinae,我有一个模板化的方法,我想添加一个专门化。对于函数,我将编写 template<> T function<typename T>() { /* ... */ } 我可能会忽略模板规范并依赖于C++的函数重载,但这不起作用,因为我是按返回类型重载的 如果您只想进行专业化,那么: 首先创建模板的主要定义: template<typename T> T recv(); 模板 T recv(); 然后仅创建专门化: template<> char
template<> T function<typename T>() { /* ... */ }
- 我可能会忽略模板规范并依赖于C++的函数重载,但这不起作用,因为我是按返回类型重载的
template<typename T>
T recv();
模板
T recv();
然后仅创建专门化:
template<>
char recv<char>() {return '\0';}
// likewise, but for int
template<>
int recv<int>() {return 0;}
template<>
float recv<float>() = delete;
模板
char recv(){return'\0';}
//同样,但对于int
模板
int recv(){return 0;}
如果有人使用缺少专门化的模板,那么链接器将显示一条关于缺少函数的错误消息
因此,您必须删除特定的专业化:
template<>
char recv<char>() {return '\0';}
// likewise, but for int
template<>
int recv<int>() {return 0;}
template<>
float recv<float>() = delete;
模板
float recv()=删除;
或所有其他专门化,但此定义必须替换主定义:
template<typename T>
T recv() = delete;
模板
T recv()=删除;
方法和函数之间有什么区别?Clang不喜欢模板大小\u t recv()
,因为错误:没有函数模板匹配函数模板专用化“recv”
是否模板t recv(){}
允许任意类型(没有专用模板的类型)工作?理想情况下,如果Irecv()
,它应该抛出编译错误,因为我不支持该数据类型。这取决于您想要什么。。。为什么要添加{}
?并且可以专门化float来引发异常。我可以在编译时不允许吗?@charmoniumQ是的,将主模板删除:template T recv()=delete代码>