2

如何在 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 ) ();
}
4

2 回答 2

3

您使用 typedef'dpointerName作为变量而不是类型(或者只是忘记命名变量):

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您的原始代码)

于 2013-10-31T17:41:39.977 回答
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;
}
于 2013-10-31T17:43:31.510 回答