类成员函数变量指向另一个类函数成员

时间:2015-08-10 05:49:42

标签: c++ class pointers

你可以解释一下为什么除了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");
};

3 个答案:

答案 0 :(得分:3)

您应该使用operator->*来调用成员函数指针,并将test指定为将被调用的对象,

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

或更清楚,

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

LIVE

答案 1 :(得分:1)

你必须在第38行实际调用函数指针,如下:

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

答案 2 :(得分:1)

您需要提供一个对象来调用指向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;