lambda可以捕获指向方法的指针吗?

时间:2013-10-31 17:31:32

标签: c++ c++11 lambda

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

2 个答案:

答案 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;
}