调用 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))
我正在尝试调用一个由指向其他 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))