如何声明一个接受 lambda 的函数?
我在互联网上阅读了许多解释如何在标准库中使用 lambda 的教程(例如 std::find
),它们都非常有趣,但我找不到任何解释如何使用 lambda 的教程。我可以将 lambda 用于我自己的函数。
例如:
int main()
{
int test = 5;
LambdaTest([&](int a) { test += a; });
return EXIT_SUCCESS;
}
我应该如何声明LambdaTest
?它的第一个参数的类型是什么?然后,我如何调用传递给它的匿名函数 - 例如 - “10”作为其参数?
I read on the internet many tutorials that explained how to use lambdas with the standard library (such as std::find
), and they all were very interesting, but I couldn't find any that explained how I can use a lambda for my own functions.
For example:
int main()
{
int test = 5;
LambdaTest([&](int a) { test += a; });
return EXIT_SUCCESS;
}
How should I declare LambdaTest
? What's the type of its first argument? And then, how can I call the anonymous function passing to it - for example - "10" as its argument?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您不想将所有内容都模板化,可以执行以下操作:
If you don't want to template everything, you can do the following:
鉴于除了 lambda 之外,您可能还希望接受函数指针和函数对象,因此您可能希望使用模板来接受带有
operator()
的任何参数。这就是像 find 这样的 std 函数所做的。它看起来像这样:请注意,此定义不使用任何 c++0x 功能,因此它完全向后兼容。这只是使用特定于 c++0x 的 lambda 表达式对函数的调用。
Given that you probably also want to accept function pointers and function objects in addition to lambdas, you'll probably want to use templates to accept any argument with an
operator()
. This is what the std-functions like find do. It would look like this:Note that this definition doesn't use any c++0x features, so it's completely backwards-compatible. It's only the call to the function using lambda expressions that's c++0x-specific.
我想贡献这个简单但不言自明的例子。它展示了如何将“可调用的东西”(函数、函数对象和 lambda)传递给函数或对象。
I would like to contribute this simple but self-explanatory example. It shows how to pass "callable things" (functions, function objects, and lambdas) to a function or to an object.