【发布时间】:2015-05-06 20:21:34
【问题描述】:
我想定义一个函数,它接受(除了通常的输入参数)一个 lambda 函数。我想尽可能地限制这个函数(它自己的输入和返回类型)。
int myfunc( const int a, LAMBDA_TYPE (int, int) -> int mylamda )
{
return mylambda( a, a ) * 2;
}
这样我就可以这样调用函数了:
int input = 5;
myfunc( input, [](int a, int b) { return a*b; } );
定义myfunc的正确方法是什么?
有没有办法定义一个默认的 lambda?像这样:
int myfunc( const int a, LAMBDA_TYPE = [](int a, int b) { return a*b; });
【问题讨论】:
-
你可以使用模板或 std::function
,因为所有的 lambdas 都需要转换成 std::function -
所以定义是 – int myfunc( const int a, std::function
mylambda = [](int a, int b) { return a*b; }); -
@S.H 使用函数模板可能会更好。
std::function可能会产生一些不必要的开销。 -
对于默认 lambda,请参阅此问题:stackoverflow.com/q/6025118/4834