首页 > 解决方案 > 我可以将 C++11 lambda 与 libevent 一起使用吗?

问题描述

在 event_new() 使用的 libevent 中有一个回调函数类型。

typedef void (*event_callback_fn)(evutil_socket_t, short, void *);

我想将 lambda 与 event_callback_fn 一起使用。

如果我使用

[](evutil_socket_t fd, short flags, void * _param){}

一切都好。
但是如果我使用 lambda 捕获列表

[&](evutil_socket_t fd, short flags, void * _param){} 

event_new() 不会被编译。

标签: c++11lambdalibeventboost-lambda

解决方案


类型别名

void (*event_callback_fn)(evutil_socket_t, short, void *);

是一个函数指针。当 Lambda 没有捕获任何内容时,它们可以自动转换为函数指针。一旦定义了闭包(有状态的 lambda),就不能将它作为 type 的参数传递event_callback_fn


推荐阅读