簡體   English   中英

類成員函數變量指向另一個類函數成員

[英]class member function variable pointing to another class function member

你可以解釋一下為什么除了main()中的最后一個std :: cout行之外,這段代碼什么都沒有顯示? 通過stackoverflow.com上的類似線程檢查,無法將它們連接到我的,這是否合法? 我嘗試將類的函數指針設置為另一個類函數:

#include <iostream>

class container;

class one {
public:
one() 
    { 
        eventsHandler = NULL; 
    };
~one() {}; 

void (container::*eventsHandler)();
};

class container {
public:
    container() 
    { 
        zone = new one;
        zone->eventsHandler = &container::events;
    };
    ~container()
    { 
        delete zone; 
    };

    one *zone;
    void events()
    {
        std::cout << "event handler is on..." << std::endl;
    };
};

int main()
{
    container *test = new container;
    test->zone->eventsHandler;

    std::cout << "just checker..." << std::endl;
    delete test;

    system("pause");
};

您應該使用operator->*來調用成員函數指針,並將test指定為將被調用的對象,

(test->*test->zone->eventsHandler)();

或者更清楚,

(test->*(test->zone->eventsHandler))();

生活

你必須在第38行實際調用函數指針,如下所示:

(test->*test->zone->eventsHandler)();

您需要提供一個對象來調用指向memeber函數的指針:

container *test = new container;
(test->*test->zone->eventsHandler)();

這里, test是對象, test->zone->eventsHandler是你保存的成員函數的指針, operator->*加入它們。

所以,它與任何其他成員函數非常相似; 但是,您可以切換哪些對象來調用成員:

container *first = new container;
container *second = new container;
(first->*second->zone->eventsHandler)();
// both pointers point to the same function
std::cout << (first->zone->eventsHandler == second->zone->eventsHandler) << std::endl;

暫無
暫無

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

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