gpt4 book ai didi

c++ - 删除一个模板函数,除了它的一个特化

转载 作者:太空宇宙 更新时间:2023-11-04 12:34:44 26 4
gpt4 key购买 nike

与其删除特化,有时更方便删除模板函数本身,但为了它的一个特化。

一个例子:

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

这种方法有什么缺点吗?

最佳答案

普通函数重载在这里工作得很好:

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 .

关于c++ - 删除一个模板函数,除了它的一个特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56913013/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com