如何在C ++中将函数作为参数传递

时间:2019-05-12 04:46:01

标签: c++

我有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关键字来与这两个功能兼容,但是它有问题,因此需要您的支持。

2 个答案:

答案 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;
}