簡體   English   中英

指向另一個類的方法的指針

[英]Pointer to method from another class

我在一個h文件中有MyFunc,在另一個h文件中有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();
    }
}

如果該方法是非靜態的,則需要該對象的實例,以便可以在其上調用方法的指針。

在建議的界面中,由於沒有指向MyFunc實例的指針(或引用),因此無法調用MyFunc.MyDo。

所以基本上,這應該工作:

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();
}

否則,如果您的方法可以是靜態的,則將“ static”關鍵字添加到方法聲明中(並采用這樣的指針:“&MyFunc :: MyDo”)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM