调用类方法非静态由指针初始化

时间:2016-10-26 01:37:27

标签: c++ pointers c++14 memory-address

我尝试通过指向其他类方法的方法调用一个方法,我跟着this: 但它对我没用。

考虑一下:

class y
{
    public:
        int GetValue(int z)
        {
            return 4 * z;
        }
};


class hooky
{
    public:     
        int(hooky::*HookGetValue)(int);
};


int(hooky::*HookGetValue)(int) = (int(hooky::*)(int))0x0; // memory address or &y::GetValue;



int main()
{
    hooky h; // instance
    cout << h.*HookGetValue(4) << endl; // error
    return 0;
}

产生的错误是:

  

[错误]必须使用&#39;。&#39;或者&#39; - &gt; &#39;在中调用指向成员的函数   &#39; HookGetValue(...)&#39;,例如&#39;(... - &gt; * HookGetValue)(...)&#39;

1 个答案:

答案 0 :(得分:1)

调用成员函数指针的正确语法是

(h.*HookGetValue)(4)

更新:原始代码无法正常工作的原因是由于C ++的运算符优先级:函数调用()的优先级高于成员.*的ptr。这意味着

h.*HookGetValue(4)

将被视为

h.*(HookGetValue(4))