社区
C++ 语言
帖子详情
回调函数为什么一定要是全局或者类的静态函数呢?
w378567402
2012-04-06 11:08:47
RT
...全文
987
9
打赏
收藏
回调函数为什么一定要是全局或者类的静态函数呢?
RT
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
东莞某某某
2012-04-06
打赏
举报
回复
原型一致就可以,注意调用约定
FrankHB1989
2012-04-06
打赏
举报
回复
回调函数?谁说不行……大不了弄成callable object。
如果只是接收函数指针的回调,也不是全局,namespace scope的都行。
原因是不像字面上那样,指向成员的指针不是指针,无法转换。(在大多数实现上分别sizeof就可以看出问题来。)
vanxeger
2012-04-06
打赏
举报
回复
因为成员函数在没有成员的时候是不存在的,所以,只能用静态的或者全局的!
Red_angelX
2012-04-06
打赏
举报
回复
因为他们在内存中的位置是固定的
Red_angelX
2012-04-06
打赏
举报
回复
不是一定,只是通常的做法,为的是方便定位.
ohayou
2012-04-06
打赏
举报
回复
因为类的成员函数需要隐含的this指针 而回调函数没有办法提供
shn521
2012-04-06
打赏
举报
回复
额,哪里写到是一定?
bellbird
2012-04-06
打赏
举报
回复
只有这样的函数才能用普通的函数指针定位。
当然,你自己设计一个函数,参数定义成类的成员函数指针,那也是可以的
Kaile
2012-04-06
打赏
举报
回复
不一定,用boost bind可以绑定类的成员函数成为静态或全局函数形式
回调
函数
中调用
类
中的非
静态
成员变量或非
静态
成员
函数
有关这方面的问题,首先说一点:
回调
函数
必须是
静态
成员
函数
或者
全局
函数
来实现
回调
函数
,大概原因是普通的C++成员
函数
都隐含了一个
函数
参数,即this指针,C++通过传递this指针给成员
函数
从而实现
函数
可以访问
类
的特定对象的数据成员。由于this指针的原因,使得一个普通成员
函数
作为
回调
函数
时就会因为隐含的this指针问题使得
函数
参数个数不匹配,从而导致
回调
函数
编译失败。 基于上面的理论,如何在
类
中封装
回调
函数
呢?
回调
函数
只能是
全局
函数
或者
静态
成员
函数
,但是由于
全局
函数
会破坏封装性,所以只能用
静态
成员
QT
类
静态
函数
作为
回调
函数
(一) 以前在使用
回调
函数
的数据都是定义一个
全局
变量,把
回调
函数
的返回结果给这个
全局
变量,然后在定时去刷新这个
全局
变量,这样虽然可以实现功能,但是方法不是很好 。 (二) 今天使用
类
的
静态
函数
作为
回调
函数
,具体方式如下, (1) 在头文件中定义
类
class CardDataDispose : public QObject { Q_OBJECT public: static void callback(int device, int msg, i...
C++
回调
函数
必须为
静态
函数
的原因
为了实现回调,我们必须把this指针给转换掉!可为了在该
函数
中可以直接操作该
类
中的成员,我们必须保留this指针!所以这是矛盾的。 在
类
封装
回调
函数
: a.
回调
函数
只能是
全局
的或是
静态
的。 b.
全局
函数
会破坏
类
的封装性,故不予采用。 c.
静态
函数
只能访问
类
的
静态
成员,不能访问
类
中非
静态
成员 让
静态
函数
访问
类
的非
静态
成员的方法: 在消息回
C++
回调
函数
中调用
类
中的非
静态
成员变量或非
静态
成员
函数
本文主要介绍C++
回调
函数
中调用
类
中的非
静态
成员变量或非
静态
成员
函数
回调
函数
中调用
类
中的非
静态
成员变量或非
静态
成员
函数
【问题】如何在
类
中封装
回调
函数
? a.
回调
函数
只能是
全局
的或是
静态
的。 b.
全局
函数
会破坏
类
的封装性,故不予采用。 c.
静态
函数
只能访问
类
的
静态
成员,不能访问
类
中非
静态
成员。 1.如何让
静态
函数
访问
类
的非
静态
成员。 a.声明一
静态
函数
a(),将
类
实例...
C++
回调
函数
必须为
静态
函数
的原因+访问非
静态
成员方法
一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在
类
内部,当在
类
的非
静态
成员
函数
中访问
类
的非
静态
成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给
函数
。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非
静态
成员
函数
的隐含形参,对各成员的访问均通过this进行。 为了实现回调,我们必须把this指针给转换掉!可为了在该
函数
中可以直接操作该
类
中的成员,我们必须保留this指针!所以这是矛盾的。 在
类
封装
回调
函数
:
C++ 语言
65,190
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章