是否可以把类的成员函数设置成回调函数

james_hw 2009-12-02 12:52:20
在做接口时,经常需要使用回调函数将信息反馈给上层,由于涉及到多线程,因此经常会使用id来区别。

我的想法是使用类里面的成员函数作为回调函数,这样就不需要使用id加以区别了。只不过不知道是否可以这么做?
...全文
189 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangxipu 2009-12-03
  • 打赏
  • 举报
回复
static
不过你要用成员变量的时候,还是要定义该变量为static类型的,比较麻烦
james_hw 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 loaden 的回复:]
如果是线程回调,可以有一个取巧的方法,无需使用thunk。
不知道楼主是否感兴趣?
[/Quote]

非常感兴趣!请教高见!
healer_kx 2009-12-02
  • 打赏
  • 举报
回复
当然可以了。。。 。。。boost::bind...

Thunk太麻烦了。
「已注销」 2009-12-02
  • 打赏
  • 举报
回复
否则,请使用静态成员函数。
「已注销」 2009-12-02
  • 打赏
  • 举报
回复
可以。
用thunk.
mngzilin 2009-12-02
  • 打赏
  • 举报
回复
呵呵,其实mfc也是用了变通的办法。

你可以将类的this指针作为参数传递到一个全局的afx函数中,然后用这个全局afx函数的参数arg(this)->func再分配到类的成员函数。所以,所有的同类成员“回调”函数都共享这个全局函数。


不过,我觉得delphi解决的更巧妙,你可以到网上查下delphi的相关资料。
「已注销」 2009-12-02
  • 打赏
  • 举报
回复
如果是线程回调,可以有一个取巧的方法,无需使用thunk。
不知道楼主是否感兴趣?
jackzhhuang 2009-12-02
  • 打赏
  • 举报
回复
用static最简单。

其实类的成员函数就是一个全局的带this指针作参数的函数,按这个思路就可以注册成回调函数。
macrojj 2009-12-02
  • 打赏
  • 举报
回复
static 的呗

做一个static的呗
「已注销」 2009-12-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jamesf1982 的回复:]
引用 2 楼 loaden 的回复:
http://www.vckbase.com/document/finddoc.asp?keyword=thunk


除了使用汇编,还有其他的方法吗?
[/Quote]
没有!
damo_xu 2009-12-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jamesf1982 的回复:]
就是不想使用static,希望每个对象的回调函数能自动独立开
[/Quote]

必须使用static。因为回调函数是C风格的,这个函数必须是全局的,所以static也是在C++下的办法。一家之言。
james_hw 2009-12-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 loaden 的回复:]
http://www.vckbase.com/document/finddoc.asp?keyword=thunk
[/Quote]

除了使用汇编,还有其他的方法吗?
james_hw 2009-12-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 julykey 的回复:]
如果非要设置成成员函数的话,用静态函数,因为它没有指向对象的this指针。见侯捷的《深入浅出MFC》
[/Quote]
就是不想使用static,希望每个对象的回调函数能自动独立开
Julykey 2009-12-02
  • 打赏
  • 举报
回复
如果非要设置成成员函数的话,用静态函数,因为它没有指向对象的this指针。见侯捷的《深入浅出MFC》
「已注销」 2009-12-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 healer_kx 的回复:]
当然可以了。。。 。。。boost::bind...

Thunk太麻烦了。
[/Quote]
这个不能用于窗口回调、线程回调、定时器回调的。

65,210

社区成员

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

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