c++11 - 我可以将 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() 不会被编译。
解决方案
类型别名
void (*event_callback_fn)(evutil_socket_t, short, void *);
是一个函数指针。当 Lambda 没有捕获任何内容时,它们可以自动转换为函数指针。一旦定义了闭包(有状态的 lambda),就不能将它作为 type 的参数传递event_callback_fn
。
推荐阅读
- node.js - 使用 Mongoose,初始化已经包含嵌入数据的新对象实例的正确方法是什么?
- python - 抵押计算器,不能用变量作为整数,做数学公式
- python - 小提琴在 Python 中以对数标度绘制问题
- c++ - 简单的 C++ 'Hello World' 程序的执行时间长
- reactjs - React-hooks 不更新状态
- javascript - 由于复选框的关闭状态,PDF java 脚本导致输出字段中的“OFF”值
- javascript - 将对象转换为数组并相应地分配其位置
- asp.net-mvc - 哪种架构/思维方式适合构建用户可以购买 Azure 等功能的 Web 应用程序?
- symfony - Symfony 4 在控制器中使用 Logger 和 Dump
- javascript - 如何将未用逗号分隔的字符串拆分为具有属性的对象数组?