我有2个基本功能,不同之处在于参数类型,但代码大部分相同。因为我不想重复代码,所以我这样做:
bool func(std::string x)
{
if(x=="true")
return true;
return false;
}
bool func(int x)
{
if(x!=-1)
return true;
return false;
}
bool fun( auto x,bool (*f)(auto ))
{
return (*f)(x);
};
我使用了auto
关键字来与这两个功能兼容,但是它有问题,因此需要您的支持。
答案 0 :(得分:5)
您可以使用模板来实现fun
:
template<typename T>
bool fun(T x, bool (*f)(T)) {
return f(x);
}
但是当您使用它时,也可以使fun
更加通用。这样,它还可以与带有自定义()
运算符(例如std::function
,lambdas等)的对象一起使用:
template<typename T, typename F>
bool fun(T x, F f) {
return f(x);
}
答案 1 :(得分:2)
您不能在函数声明中使用auto,而应尝试使用类似这样的模板
bool func(std::string x)
{
if(x=="true")
return true;
return false;
}
bool func(int x)
{
if(x!=-1)
return true;
return false;
}
template<typename T>
bool fun(T x,bool (*f)(T))
{
return (*f)(x);
}
int main(int argc, char* argv[])
{
std::string str = "Test";
fun(str, func);
int x = 2;
fun(x, func);
return 0;
}