如何在C ++ 11中创建一个捕获指向方法指针的lambda?如果我尝试使用GCC(4.6)编译器,它不能推断出表达式类型。
我试过了:
typedef std::string ( Class::*pointerName ) () const;
pointerName = &Class::method;
auto comparer = [&pointerName] ( Class * pFirst, Class * pSecond )
{
return ( pFirst->*pointerName ) () < ( pSecond->*pointerName ) ();
}
答案 0 :(得分:3)
您使用typedef'd pointerName
作为变量而不是类型(或者只是忘记命名变量):
typedef std::string ( Class::*pointerName ) () const; // declares a type alias
pointerName ptr = &Class::method;
// ^^^ a name for your variable of type pointerName
auto comparer = [&ptr] ( Class * pFirst, Class * pSecond )
{
return ( pFirst->*ptr ) () < ( pSecond->*ptr ) ();
}
(或者只删除原始代码中的typedef
)
答案 1 :(得分:0)
#include <iostream>
using namespace std;
typedef void (*func_t)(void);
typedef void (*function)(func_t f);
void foo()
{
std::cout<<"Foo";
}
int main() {
function func = [&](func_t f) {
f();
};
func(&foo);
return 0;
}