如何创建一个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放到原始代码中)

10-06 16:00