通过指向类成员的指针调用函数

时间:2015-03-04 22:09:00

标签: c++ member-pointers

在以下代码中:

class foo
{
public:
    void foo_function() {};
};

class bar
{
public:
    foo foo_member;

    void bar_function(foo bar::*p_foo)
    {
        // what is the corrct sintax for following:
        this->*p_foo->foo_function(); // expression must have a pointer type??
    }
};


int main()
{
    foo foo_obj;
    bar bar_obj;
    typedef foo bar::*p_foo;
    p_foo blah = &bar::foo_member;
    bar_obj.bar_function(blah);
    return 0;
}

使 bar :: bar_function 工作的正确语法是什么?

1 个答案:

答案 0 :(得分:5)

这适用于ideone

void bar_function(foo bar::*p_foo)
{
    (this->*p_foo).foo_function();
}

这一切都与拥有正确的间接水平有关。由于p_foo是指向成员的指针,因此我们需要在尝试从this访问它之前取消引用它。此时,您拥有实际的foo_member对象,而不是指向它的指针,因此您可以通过点表示法调用其foo_function