将对象方法传递给变量

时间:2017-04-17 22:33:58

标签: c++ function-pointers

如何调用传递给变量的对象方法?

class A {
public:
    inline int f() {
        return 1;
    }
};


int main() {
    A a;

    int (A::*y)(); //'y' must be a method of 'A' class that returns 'int'
    y = &A::f; //bind 'f' method

    *y(); //how to invoke???
}

另一个thread将一个方法绑定到一个对象字段,它以这种方式调用(a.*(a.x))(),但我找不到一种方法来对一个简单的变量做类似的事情。

1 个答案:

答案 0 :(得分:2)

只需(a.*y)();。您需要额外的parantheses使编译器在进行函数调用之前解析指向成员的指针。见operator precedence

class A {
public:
    inline int f() {
        return 1;
    }
};


int main() {
    A a;

    int (A::*y)(); //'y' must be a method of 'A' class that returns 'int'
    y = &A::f; //bind 'f' method

    (a.*y)();
}

Demo