use*_*370 3 c++ lambda pointers c++11
我想把我的笨拙的爪子放在operator()
lambda函数上.以下似乎完成了任务:
template <typename F>
void bar(F func) {
void (F ::*pm)();
pm = &F::operator();
}
Run Code Online (Sandbox Code Playgroud)
但是,在下面,我需要包含mutable
关键字.这是为什么?是否有可能在上面声明一个指向成员函数的指针,它可以定位任意lambdas?
int main(int argc, char *argv[])
{
bar([]() mutable {});
return 0;
}
Run Code Online (Sandbox Code Playgroud)
根据N3291 C++ 0x规范的5.1.2,lambda的operator()const
除非你明确声明它mutable
:
const
当且仅当lambda表达式的parameter-declaration-clause未后跟时,才声明此函数调用运算符(9.3.1)mutable
.
您可以做一些模板元编程魔术来检测哪个是哪个.
但是,应该注意的是,一旦func
超出范围,就不能再使用该成员指针了.它是一个成员指针,而不是一个函数指针,所以你不能在两者之间进行转换.