当我有这样的回调函数时:
using MessageCallback =
std::function<void(const Message &, uint64_t deliveryTag, bool redelivered)>;
我可以在一个类中声明一个静态回调函数:
static void MessageCB(const AMQP::Message &message,
uint64_t deliveryTag,
bool redelivered)
{...}
但是我无法访问此回调函数中的任何成员变量。
当我这样编写Lambda函数时:
auto MessageCB= [&](const AMQP::Message &message,
uint64_t deliveryTag,
bool redelivered)
{...}
然后我可以使用声明lambda的上下文中的任何成员变量。
这是如何工作的? 捕获子句的工作原理如何?
与静态回调函数有什么区别?
答案 0 :(得分:3)
This cpp reference page解释了Lambda表达式的形成方式,以下摘录自 captures 部分(我强调):
[&]通过引用捕获lambda主体中使用的所有自动变量,如果存在,则通过引用捕获当前对象
如果您要特别询问编译器在Lambda中声明变量时如何捕获变量,那么this是有用的资源。在该页面上:
将捕获列表添加到lambda时,编译器会将适当的成员变量添加到lambda-functor类以及用于初始化这些变量的构造函数。
答案 1 :(得分:0)
否,我不知道如何使用它,但是我想了解如何使用Lamda 启用对capure子句的访问。什么是等效的 在C ++ 03中?如何使用静态回调重写lamda 功能? – selbolder
还有here