[英]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.