我有2个类,我想通过回调将方法从一个传递到另一个!
看到我也希望使用void(* callBack)();来保存此方法的地址。
我曾经在C中执行此操作,但我不知道如何在c ++中执行此操作;
#include <iostream>
using namespace std;
class A
{
private:
void (*callBack)(); //to hold the address of the method
public:
A();
void setCallBack(void(*cB)());
void useCallBack();
};
A::A()
{
}
void A::setCallBack(void(*cB)())
{
callBack = cB;
}
void A::useCallBack()
{
callBack();
}
class B
{
private:
A * Aguy;
public:
B();
void someMethod();
void otherMethod();
};
B::B()
{
Aguy = new A();
}
void B::otherMethod()
{
Aguy->setCallBack(someMethod);
Aguy->useCallBack()
}
void B::someMethod()
{
cout << "Hello. I'm from class b" << endl;
}
int main()
{
B Bguy;
Bguy.otherMethod();
return 0;
}
有关详细信息,请参见c ++-<无法解析的重载函数类型>。
引用答案:
在C ++中,成员函数具有指向对象的隐式参数(成员函数内部的this指针)。普通C函数可以被认为与成员函数具有不同的调用约定,因此其指针的类型(指针到成员函数vs指针到函数)是不同且不兼容的。C ++引入了一种新型的指针,称为成员指针,只有提供一个对象才能调用它。
放置静态someMethod
:
class B
{
private:
A * Aguy;
public:
B();
static void someMethod();
void otherMethod();
};
void B::otherMethod() {
Aguy->setCallBack(B::someMethod);
Aguy->useCallBack(); // adding missing semicolon
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句