删除模板功能的一项专门功能

时间:2019-07-06 09:57:04

标签: c++ c++17

有时候,与其删除专业化信息,不如说它更方便 删除模板函数本身,但要删除其专门功能之一。

一个例子:

template<typename T>
bool IsLucky(T) = delete;


bool IsLucky<int>(int n) {
return !(n%7);
}
// I guess bool IsLucky(int n) will not help my cause

template argument deduction的帮助下,我可以保证不使用尖括号不会发生任何隐式转换。

char c='F';
IsLucky(c); // Will not compile

这种方法是否有缺点?

1 个答案:

答案 0 :(得分:0)

纯函数重载在这里效果很好:

template<typename T>
bool IsLucky(T) = delete;

inline bool IsLucky(int n) {
    return !(n%7);
}

int main() {
    IsLucky(1);
    IsLucky(1u);  // error: use of deleted function ‘bool IsLucky(T) [with T = unsigned int]’
    IsLucky('1'); // error: use of deleted function ‘bool IsLucky(T) [with T = char]’
}

请注意,从编译时间的角度来看,SFINAE may slow down compilation times considerably