Я хочу реализовать класс в С++, который имеет обратный вызов.
Итак, мне нужен метод, который имеет 2 аргумента:
- целевой объект. (скажем, * MyObj)
- указатель на функцию-член целевой объект. (так что я могу сделать * MyObj- > memberFunc(); )
Условия:
-
myObj может быть из любого класса.
-
функция-член, которая будет функцией обратного вызова, нестационарна.
Я читал об этом, но мне кажется, что я должен знать класс myObj перед рукой. Но я не уверен, как это сделать. Как я могу справиться с этим? Возможно ли это на С++?
Это то, что я имею в виду, но, безусловно, неверно.
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 кажется хорошей идеей (предполагается, что установлен)