首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在C++中将函数作为参数传递

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

Stack Overflow用户
提问于 2019-05-12 12:46:01
回答 2查看 938关注 0票数 2

我有两个基本函数不同的参数类型,但在这些代码中大部分是相同的。因为我不想重复代码,所以我这样做:

代码语言:javascript
复制
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关键字来兼容这两个功能,但它有一些错误,所以我需要你的支持。

EN

回答 2

Stack Overflow用户

发布于 2019-05-12 13:07:28

您可以使用模板来实现fun

代码语言:javascript
复制
template<typename T>
bool fun(T x, bool (*f)(T)) {
    return f(x);
}

但同时,您也可以使fun更通用一些。通过这种方式,它也可以使用带有自定义()操作符的对象(例如std::function、lambdas等):

代码语言:javascript
复制
template<typename T, typename F>
bool fun(T x, F f) {
    return f(x);
}
票数 5
EN

Stack Overflow用户

发布于 2019-05-12 13:26:01

您不能在函数声明中使用auto,而应尝试使用类似以下内容的模板

代码语言:javascript
复制
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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56096294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档