3

次のコードでは:

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を機能させるための正しい構文は何ですか?

4

1 に答える 1

5

これはideoneで動作します:

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

適切なレベルの間接性を持つことがすべてです。p_fooはメンバーへのポインターであるため、からアクセスする前に逆参照する必要がありますthis。この時点で、オブジェクトへのポインターではなく、実際のオブジェクトを取得しているため、ドット表記でfoo_member呼び出すことができます。foo_function

于 2015-03-04T22:35:52.943 に答える