2017-04-17 145 views
0

如何調用傳遞給變量的對象方法?將對象方法傳遞給變量

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))(),但我不能找到一種方法,做類似的事情,以一個簡單的變量。

回答

2

只需做(a.*y)();。在進行函數調用之前,您需要使用額外的禁忌讓編譯器解析指向成員的指針。見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

+0

它的工作!謝謝。 – Humberd

+0

如何獲得傳遞給變量'y'的函數名稱(在這種情況下,它將是'f')? – Humberd

+1

@Humberd,沒有可移植的或簡單的方法......目前的方法是通過'std :: type_info',它不會給你你想要的名字。我們希望C++ 20的一些反思建議可以擴展... :-) – WhiZTiM