C++ 11 - 将 C 样式回调绑定到类成员函数

C++ 11 - bind a C style callback to a class member function

本文关键字:绑定 成员 函数 回调 样式 C++      更新时间:2023-10-16

使用来自 http://ideone.com/5MHVz 的代码我很好奇我怎么可能将 lambda 函数(内联)绑定到 C 样式函数指针,但即使不涉及状态,我也无法使用类函数执行此操作。这一定是一些根本的区别,但我不明白在这种情况下lambda绑定是如何可能的(lambda生成的代码也有一个概念)。有解决方法吗?

代码波纹管:

#include <iostream>
#include <functional>
using namespace std;
typedef int (*http_cb) (int*);
struct http_parser_settings {
  http_cb      on_message_begin;
};
class HttpParser
{
  int OnMessageBegin(int* val){}
  HttpParser()
  {
    http_parser_settings settings;
    //settings.on_message_begin = std::bind(&HttpParser::OnMessageBegin, this, std::placeholders::_1); -- this one does not compile
   settings.on_message_begin = [](int* p){ return 0;};
  }
};
int main() {
}

非捕获 lambda 可以转换为函数指针。它们本质上是免费的功能,所以没有问题。

即使在 MSVC2010 中,您也可以将 lambda 存储在 std::function 对象中,因此必须有一种方法可以获取原始函数指针。 我从未深入研究过它的工作原理,但以前肯定使用过这个功能。