我在一个h文件中有MyFunc,在另一个文件中有MyClass1。并且当MyClass1没有指向MyFunc方法的Null指针时,想从MyFunc调用一些方法。 代码工作OnIncCall,但我怎么能指向MyClass1.MyDo到MyFunc.MyDo?
void OnIncCall()
{
std::cout << "I'm happen " << std::endl;
}
class MyFunc
{
public:
void MyDo()
{
std::cout << "I'm happen " << std::endl;
};
};
class MyClass1
{
public:
MyClass1();
void (*MyDo)();
};
MyClass1::MyClass1()
{
MyDo = NULL;
}
int _tmain(int argc, _TCHAR* argv[])
{
MyClass1 a;
MyFunc b;
//a.MyDo = b.*MyDo;
a.MyDo = OnIncCall;
if (a.MyDo != Null){
a.MyDo();
}
}
答案 0 :(得分:1)
如果方法是非静态的,则需要对象的实例,以便可以在其上调用指针指针。
在您建议的界面中,您无法调用MyFunc.MyDo,因为您没有指向MyFunc实例的指针(或引用)。
基本上,这应该有效:
class MyFunc; // Forward declare MyFunc class
class MyClass1
{
public:
MyFunc & obj; // Could be a pointer too
void (MyFunc::*MyDo)(); // Pointer to method
void myDo() { (obj.*MyDo)(); } // Call pointed method
void setPtr(void (MyFunc::*ptr) ()) { MyDo = ptr; } // Set the pointer to method
// Initialize the reference to MyFunc's instance
MyClass1(MyFunc & obj) : obj(obj) {}
};
在另一个文件中,您的主要功能如下所示:
#include "MyClass1.h"
#include "MyFunc.h"
int main(int ac, char ** av)
{
MyFunc a;
MyClass1 b(a);
b.setPtr(&MyFunc::MyDo);
b.myDo();
}
否则,如果您的方法可以是静态的,请添加&#34;静态&#34;方法声明的关键字(并采用如下指针:&#34;&amp; MyFunc :: MyDo&#34;)。