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

Call class method non-static initialised by pointer

本文关键字:静态 静态类 类方法 指针 初始化 调用      更新时间:2023-10-16

我试图调用一个方法初始化的指针到其他类的方法,我遵循这个:但这对我不起作用。

考虑一下:

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]必须使用'。'或'->'来调用指针到成员函数'HookGetValue(…)',例如:"(…->* HookGetValue)(…)'

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

(h.*HookGetValue)(4)

更新:原始代码没有按预期工作的原因是c++的操作符优先级:函数调用()比ptr对成员.*具有更高的优先级。这意味着

h.*HookGetValue(4)

将被视为

h.*(HookGetValue(4))