请教:如何把一个类的成员函数作为回调参数?

assiss 2004-05-04 02:11:25
例如:
WNDPROC oldproc=&classm::funcm;
gcc编译报错:
converting from `LRESULT (classm::*)(HWND__*,
unsigned int, unsigned int, long int)' to `LRESULT (*)(HWND__*, unsigned
int, unsigned int, long int)'
...全文
59 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cngdzhang 2004-05-04
  • 打赏
  • 举报
回复
因为c++要支持多态

一个函数同一个名字可以有好几个实现的

void print(char *s)
void print(string s)

这个取不了地址了把?

而且c++还有运行时的动态绑定
ghlpj 2004-05-04
  • 打赏
  • 举报
回复
好象C++对象模型里说过Class::Func实际上是取的相对于this的偏移量,回去验证一下
assiss 2004-05-04
  • 打赏
  • 举报
回复
定义成static的确可以,
但是新的问题又有了。呵呵。

所以准备放弃掉用类成员函数,
直接使用全局函数吧。
下午结帖(我们这里网络基本瘫痪了,没想到大家都还是通顺的。羡慕啊。)
blizzard2000 2004-05-04
  • 打赏
  • 举报
回复
to cngdzhang
你用的什么编译器?我怀疑这个跟编译器有关。(纯属猜测)
flyingxu 2004-05-04
  • 打赏
  • 举报
回复
怎么理解类的成员函数地址是不确定的,而静态、全局函数的地址是确定的?
cngdzhang 2004-05-04
  • 打赏
  • 举报
回复
静态函数的地址是确定的
但是取地址的时候
要加上类名
例如
class A
{
public :
static void f(){}
}

用的时候是
A::f()
如果用作回调函数,编译器会报错的

我看了好多程序(EnumChildWindow等API函数,Hook),它们的回调函数都是全局的
blizzard2000 2004-05-04
  • 打赏
  • 举报
回复
to cngdzhang
静态函数的地址也是确定的
chenqing1128 2004-05-04
  • 打赏
  • 举报
回复
学习
blizzard2000 2004-05-04
  • 打赏
  • 举报
回复
定义成静态函数看可否?
cngdzhang 2004-05-04
  • 打赏
  • 举报
回复
只能是一个全局函数 带CALLBACK类型的

全局函数的地址是确定的
cngdzhang 2004-05-04
  • 打赏
  • 举报
回复
不能的
类的成员函数取的地址是不确定的
assiss 2004-05-04
  • 打赏
  • 举报
回复
一旦能上网,问题就得到解决了。
这么快啊。
谁先进来这100分白给他了。

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧