使用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() {
}
答案 0 :(得分:3)
非捕获lambdas可以转换为函数指针。它们基本上是免费的功能,所以没有问题。
答案 1 :(得分:-1)
即使在MSVC2010中,您也可以将lambdas存储在std :: function对象中,因此必须有一种获取原始函数指针的方法。我从来没有仔细研究它的工作原理,但之前肯定使用过这个功能。