2013-10-31 70 views
2

如何創建一個lambda捕獲指向C++ 11中的方法的指針?如果我使用GCC(4.6)編譯器試圖這樣做,它不能推導出表達式類型。lambda可以捕獲指向某個方法的指針嗎?

我嘗試這樣做:

typedef std::string (Class::*pointerName)() const; 
pointerName = &Class::method; 

auto comparer = [&pointerName] (Class * pFirst, Class * pSecond) 
{ 
    return (pFirst->*pointerName)() < (pSecond->*pointerName)(); 
} 
+3

向我們顯示代碼。 – 0x499602D2

回答

3

您使用的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刪除)

+0

謝謝你,現在它工作。 – kuhar

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; 
} 
相關問題