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

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)'
...全文
28 12 点赞 打赏 收藏 举报
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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分白给他了。
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言
加入

6.0w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2004-05-04 02:11
社区公告
暂无公告