如何创建一个Lambda来捕获指向C++ 11中方法的指针?如果我尝试使用GCC(4.6)编译器执行此操作,则无法推断出表达式类型。
我尝试了这个:
typedef std::string ( Class::*pointerName ) () const;
pointerName = &Class::method;
auto comparer = [&pointerName] ( Class * pFirst, Class * pSecond )
{
return ( pFirst->*pointerName ) () < ( pSecond->*pointerName ) ();
}
最佳答案
您将typedef的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
放到原始代码中)