C ++中的Lambda用于向其他函数提供函数

时间:2014-10-17 14:53:37

标签: c++ c++11

我正打算致电

template <typename FUNC>
int execute ( FUNC )
{
    int a { 5 };
    int b { 8 };
    return FUNC ( a, b );
}

使用以下行:

std::cout << execute ( [] ( int a, int b ){ return a + b;  }) << std::endl;

出现以下错误:

error C2661: 'main::<lambda_5994edd6ba73caf12c83e036d510d0d8>::<lambda_5994edd6ba73caf12c83e036d510d0d8>': Keine überladene Funktion akzeptiert 2 Argumente

所以问题是我做错了什么?错误是德语,但它基本上只是说该函数没有采取明显应该做的2个参数

2 个答案:

答案 0 :(得分:6)

不,那不是你应该怎么称呼这个功能。您没有指定参数的名称。你试图做的是将类型用作函数。

更正的模板功能是:

template <typename FUNC>
int execute ( FUNC f )
{
    int a { 5 };
    int b { 8 };
    return f( a, b );
}

答案 1 :(得分:2)

您实际上并未调用该函数...您正在构建FUNC类型的对象并将其返回,并且FUNC无法转换为int。你的意思是:

template <typename FUNC>
int execute (FUNC&& f)
{
    int a { 5 };
    int b { 8 };
    return f( a, b );
}

或者(原来写的“更好”,但这是不好的词选择):

int execute(std::function<int(int, int)> f)
{
    int a { 5 };
    int b { 8 };
    return f( a, b );
}