调用由指针初始化的非静态类方法
Call class method non-static initialised by pointer
我试图调用一个方法初始化的指针到其他类的方法,我遵循这个:但这对我不起作用。
考虑一下:
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))
相关文章:
- 静态 constexpr 类成员变量对多线程读取是否安全?
- 我的编译器是否忽略了我未使用的静态thread_local类成员
- 静态存储类C++计数
- 内联初始化的静态 const 类成员的初始化顺序保证
- 继承:动态派生类成员与静态派生类成员
- 避免在静态常量类上定义但不使用
- 根据模板参数可以选择静态的类成员
- 为什么不允许静态成员变量的初始化在类中,而允许静态静态成员的初始化
- 子类中具有不同值的静态基类属性
- 等效于 Java 静态对象类C++
- 是否可以按模板类型更改静态 const 类成员的值
- 如何在标题和CPP之间拆分静态/模板类
- 静态模板类成员函数的这两个调用之间有什么区别?
- 对静态重载(类)函数/方法的调用是不明确的
- 具有静态模板类成员的模板类:如何定义静态成员
- pthread没有静态的类
- 单例文件静态与类私有静态
- 使用折叠表达式初始化静态 constexpr 类数据成员不编译
- constexpr静态结构类成员的声明冲突
- 初始化在 C++ 中自定义类的构造函数中没有参数的静态 const 类成员