我正打算致电
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个参数
答案 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 );
}