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

Call class method non-static initialised by pointer

我正在尝试调用一个由指向其他 class 方法的指针初始化的方法,我已遵循 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;
}

产生的错误是:

[Error] must use '.' or '->' to call pointer-to-member function in 'HookGetValue (...)', e.g. '(... ->* HookGetValue) (...)'

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

(h.*HookGetValue)(4)

更新:原始代码无法按预期工作的原因是 C++ 的运算符优先级:函数调用 () 的优先级高于指向成员 .* 的指针。这意味着

h.*HookGetValue(4)

将被视为

h.*(HookGetValue(4))