我正在尝试创建仅获取 int 参数的函数。因此,当包含其他类型(double、char、bool)时,我通常delete会像下面的代码一样排除它:
#include <iostream>
using namespace std;
int add_int(int x, int y){
return x + y;
}
int add_int(double, double) = delete;
int add_int(int, double) = delete;
int add_int(double, int) = delete;
int add_int(bool, int) = delete; // need much more code.. very inefficient
int main(void){
cout << add_int(1, true) << endl; // error should happen
}
Run Code Online (Sandbox Code Playgroud)
但我觉得这样效率太低了。有没有像“仅可能是 int”或“排除 double、char、bool(我的意思是只输入一个参数)”之类的方法?
是的,您可以使用删除所有内容的函数模板。
template<class X, class Y>
int add_int(X, Y) = delete;
Run Code Online (Sandbox Code Playgroud)
现在,当编译器解析函数调用时,它将选择模板,除非存在不需要隐式类型转换的函数重载。将优先选择不需要转换的重载而不是模板函数。
更多信息请参见:过载解决方案
如果您愿意,您还可以通过添加专业化来使您的实现成为此模板的一部分:
template<>
int add_int(int x, int y)
{
return x + y;
}
Run Code Online (Sandbox Code Playgroud)