尝试在对象的构造函数中定义捕获this
的lambda时出现编译器错误。看起来像这样:
typedef int (*HANDLER)(char*, int);
struct Foo {
bool member;
Foo() {
HANDLER h1 = [](char* one, int two)->int {
return 0; // fine
};
HANDLER h2 = [](char* one, int two)->int {
member = false; // error: 'this' was not captured - understood
return 0;
};
HANDLER h3 = [this](char* one, int two)->int {
member = false; // ok now but other error as below
return 0;
};
}
};
h1
很简单,可以很好地编译。 h2
无法编译,因为未捕获成员变量member
。这也是有道理的。但是,当我向捕获中添加this
以获得对member
的访问权限时,我收到一条错误消息,我正在努力解析:
mcve.cpp: In constructor ‘Foo::Foo()’:
mcve.cpp:16:11: error: cannot convert ‘Foo::Foo()::<lambda(char*, int)>’ to ‘HANDLER {aka int (*)(char*, int)}’ in initialization
};
^
这是在-std = c ++ 14上使用gcc 4.9.1,尽管在Mac上我收到clang-1000.11.45.5的错误。请注意,HANDLER
函数指针typedef是我正在外部库中使用的东西。