首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定义函数时,lambda函数/表达式是什么类型?

定义函数时,lambda函数/表达式是什么类型?
EN

Stack Overflow用户
提问于 2015-05-06 11:47:40
回答 1查看 179关注 0票数 2

我想要定义一个函数(除了通常的输入参数)为lambda函数。我希望尽可能地限制这个函数(它自己的输入和返回类型)。

代码语言:javascript
复制
int myfunc( const int a, LAMBDA_TYPE (int, int) -> int mylamda )
{
    return mylambda( a, a ) * 2;
}

这样,我就可以按以下方式调用该函数:

代码语言:javascript
复制
int input = 5;
myfunc( input, [](int a, int b) { return a*b; } );

定义myfunc的正确方法是什么?

有没有一种方法来定义默认的lambda?如下所示:

代码语言:javascript
复制
int myfunc( const int a, LAMBDA_TYPE = [](int a, int b) { return a*b; });
EN

回答 1

Stack Overflow用户

发布于 2015-05-06 12:21:34

有两种选择,类型擦除std::function<signature>强制执行一个与您的问题类似的特定签名,但它会增加一些额外的成本(主要是不能在一般情况下内联)。另一种方法是使用模板保留最后一个参数作为泛型对象。从性能的角度来看,这种方法可能更好,但您将语法检查留给编译器(我不认为这是一个问题)。其中一个注释提到将lambda作为函数指针传递,但这只适用于没有捕获的lambda。

我个人赞成第二种选择:

代码语言:javascript
复制
template <typename Fn>
int myFunc(const int a, Fn&& f) {
   return f(a, a) * 2;
}

请注意,虽然这并不显式地强制使用特定的签名,但编译器将强制使用两个int调用f,并生成可以乘以2并转换为int的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30075804

复制
相关文章

相似问题

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