給大家帶來歡樂!我有一個函數指針的方法如何將指針方法的某些類轉換爲指針函數?
int Myclass::*myMethod(char* a,char* b){
//some code
}
,並嘗試運行它
bool Myclass::myMethod2(){
AnotherClass *instance = AnotherClass:getInstance();
instance-> addParams(&myMethod);
return true;
}
AnotherClass - 這個類中的另一個DLL。 AnotherClass definition
class AnotherClass
{
//friend class Myclass;
public:
static AnotherClass* getInstance();
void addParams(int (*myMethod)(char*, char*) =0);
//I try so void addParams(int (Myclass::*myMethod)(char*, char*) =0);
};
並且有錯誤C2664。無法將參數1從'int Myclass :: *(__cdecl *)(char *,char *)'轉換爲int(__cdecl *)(char *,char *)。
嗯..我該怎麼辦?
這是不可能的一個成員函數指針轉換爲非成員函數指針。你真的想在這裏做什麼?可能有更好的方法來做你想做的事。 –
'AnotherClass'看起來設計得很差,因爲它只需要一個函數指針,沒有上下文屬於調用者。你的調用者顯然希望提供一些上下文(當在Myclass的特定實例上調用一個非靜態成員函數MyMethod時,你需要指向'this'的東西)。 C風格的回調接口通常有一個用戶數據指針,在C++中你可以做同樣的事情,或者使用多態。根據dll邊界的重要性,你可以使'addParams'成爲一個模板。 –
[禁用「壞功能投射」警告]的可能的重複(http://stackoverflow.com/questions/6676764/disabling-bad-function-cast-warning) – iammilind