2014-01-29 52 views
0

我使用的Visual Studio 2012專業 轉換我有類日誌:如何指針從類功能

class log 
{ 
    //some code 
    private: 
     int check(); 
}; 

,並在另一個類中,我有指針的構造函數的功能是這樣的:

class fun 

{ 
    //some code 
public: 
    fun(int (*wsk)()); 
} 

當我嘗試從類日誌發送校驗函數構造函數樂趣我得到錯誤:

typedef int (*fwsk)(); 
fwsk gwsk = check; 
fwsk gwsk = (void *)check; 

如何使它工作?

+0

有什麼錯誤? – 0x499602D2

+0

錯誤C3867:'log :: check':函數調用缺少參數列表;使用'&log :: check'創建一個指向成員的指針 –

+0

你能給我們一個最小的代碼示例,當編譯時給我們提供了同樣的錯誤。 – 0x499602D2

回答

0

成員函數採取一種無形的第一個參數this

所以int log::check是類型的函數指針:

typedef int (log::*function_pointer_type)(void); 

不幸的是,這將永遠是相同的類型

typedef int (*fwsk)(void); 

你可以在C++ 11中使用std::bind來解決這個問題並傳入一個通用函數。

例子:

typedef std::function<void(int)> fwsk; 

class Log 
{ 
public: 
    int check(){} 
}; 

class fun 
{ 
    //some code 
    public: 
     fun(const fwsk& wsk){} 
}; 


int main(int argc, char** argv) 
{ 
    Log l; 

    fun f(std::bind(&Log::check,&l)); 
} 
+0

你能寫一個例子嗎? –