2014-02-08 70 views
0
#include<iostream> 

class Bar; 

class Foo{ 
public: 
    void (Bar::*callback)(void); 
    Bar* bar; 
    Foo(Bar* bar, void (Bar::*cb)(void)){ 
     callback = cb; 
    } 
    void execute(){ 
     (bar->*callback); // commenting out this will make it compile 
     // i want to execute callback here, but can't find a way to do it 
    } 
}; 

class Bar{ 
public: 
    Foo *f; 

    Bar(){ 
     f = new Foo(this, &Bar::func); 
     f->execute(); 
    } 

    void func(){ // this can't be static 
     std::cout << "func executed" << std::endl; 
    } 
}; 

int main(){ 
    Bar b; 

    return 0; 
} 

這就是我想要做的,我需要做一個回調例如一個按鈕。 但我不能調用成員函數指針。成員函數的C++回調

還是另一種方式,我應該用它來獲得此功能?

編輯:我得到的錯誤是「非法使用非靜態成員函數」 使函數靜態不是一個選項。

+0

您需要的std ::功能 –

+0

你得到一個錯誤?它是什麼? – 0x499602D2

回答

0
(bar->*callback); 

你不在這裏調用該函數,只是取消引用它:

(bar->*callback)(); 
//    ^^ 
+0

嗯,我很確定我已經嘗試過,但確實有效。 – lasvig