好的,这里是显示问题的伪代码。我想将Man的sayAh()方法传递给Dog实例。
class Man
{
public:
void haveDogBiteYou(){
Dog *mydog = new Dog();
myDog->setCallback(&this->sayAh); // How???
myDog->bite();
}
void sayAh(){
cout << "AHHHHHH!";
}
}
class Dog{
public:
void (*callbackFunc)(void);
void setCallback(void (*callbackFunc)(void)){
this->callbackFunc=callbackFunc;
}
void bite(){
callbackFunc();
}
}
我希望以一种方式设置代码,如果我有另一个类像Kid(即Man的子类),我可以将回调传递给该函数的方法成员好。所以可能正在改变
void (*callbackFunc)(void);
到
void (Man::*callbackFunc)(void);
不会解决这个问题......顺便说一句,我对其他解决方案持开放态度......像Java这样的界面效果很好。
答案 0 :(得分:1)
检查http://ideone.com/wjRwi4(并在下面复制)
但您可能需要检查一下您的工作方式:
代码:
#include <iostream>
using namespace std;
class Man;
class Dog{
public:
Man *man;
void (Man::*callbackFunc)(void);
void setCallback(Man *_man,void (Man::*_callbackFunc)(void)){
callbackFunc=_callbackFunc;
man=_man;
}
void bite();
};
class Man
{
public:
void haveDogBiteYou(){
Dog *myDog = new Dog();
myDog->setCallback(this,&Man::sayAh); // How???
myDog->bite();
}
void sayAh(){
cout << "AHHHHHH!";
}
};
void Dog::bite(){
(man->*callbackFunc)();
}
int main() {
Man m;
m.haveDogBiteYou();
return 0;
}
答案 1 :(得分:0)
您可以更改:
void sayAh(){
cout << "AHHHHHH!";
}
根据您的需要使用静态成员函数。
static void sayAh(){
cout << "AHHHHHH!";
}
如果你这样做,你可以简化
myDog->setCallback(this->sayAh);
到
myDog->setCallback(sayAh);