1

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

代码如下:

#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() {

}
4

2 回答 2

3

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

于 2012-10-10T14:27:07.963 回答
-1

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

于 2012-10-10T14:32:07.890 回答