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

时间:2012-10-10 14:21:15

标签: c++ lambda c++11

使用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() {

}

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:-1)

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