我想在C++中實現一個有回調的類。如何在C++中實現回調?
所以我想我需要的是有2個參數的方法:
- 目標對象。 (比方說 * myObj)
- 指向成員函數 的目標對象。 (所以我可以做 * myObj-> memberFunc();)
的條件是:
MyObj中可來自任何類。
要成爲回調函數的成員函數是非靜態的。
我一直在閱讀關於這個,但它似乎我需要知道myObj的類之前。但我不知道該怎麼做。我該如何處理?這在C++中可能嗎?
這是我的想法,但肯定是不正確的。
class MyClassWithCallback{
public
void *targetObj;
void (*callback)(int number);
void setCallback(void *myObj, void(*callbackPtr)(int number)){
targetObj = myObj;
callback = callbackPtr;
};
void callCallback(int a){
(myObj)->ptr(a);
};
};
class Target{
public
int res;
void doSomething(int a){//so something here. This is gonna be the callback function};
};
int main(){
Target myTarget;
MyClassWithCallback myCaller;
myCaller.setCallback((void *)&myTarget, &doSomething);
}
我感謝所有幫助。
謝謝。
UPDATE 你們大多數人都說觀察和授權,那麼我正是在尋找什麼,我是一個Objective-C/Cocoa頭腦的人。 我目前的實現是使用虛擬函數的接口。只是我認爲只是傳遞對象和成員函數指針(如boost!)而不是定義接口會更「聰明」。但似乎每個人都同意接口是最簡單的方法嗎? Boost似乎是一個好主意,(假設已安裝)
觀察者模式需要在「觀察」類接口中進行更改,有時更簡單和更清晰地使用「函數」和「綁定」而不是接口。還要注意,如果你使用最近的gcc,你已經有'function'和'bind',所以不需要提升。使用函數/綁定是功能性編程模式,而使用接口更多的是使用具有不同含義的「標準」設計模式 – Artyom 2010-08-01 17:28:52