当前位置: 代码迷 >> QT开发 >> 信号-槽 和回调函数,该如何解决
  详细解决方案

信号-槽 和回调函数,该如何解决

热度:645   发布时间:2016-04-25 05:03:06.0
信号-槽 和回调函数
问题描述:
笔者近日,在做网络嗅探器,其中用到一函数,pcap_loop(pcap_t *,int,pcap_hander callback,u_char *);
callback参数如下:(u_char *,const pcap_pkthdr *,const u_char *);
其作用是,来一个数据包,调用一次callback,来一次调用一次。
但,令笔者困惑的是,这个callback并不能被定义成类的成员,一旦定义成类的成员,编译便会报错
argument of type‘void (classname::)(u_char *,const pcap_pkthdr *,const u_char *) does not match void (*)(u_char *,const pcap_pkthdr *,const u_char *)’。
故,笔者换做了友元、static,编译,运行等,均不会有问题。
可问题是,我想在callback当中使用类的成员。
问题:
如何在callback当中使用类的成员?或者,这个callback应该一何种方式来定义?在或者,如何通过QT的信号与槽机制来实现只?



------解决方案--------------------
这个比较简单, 你把该函数定义成static的类成员函数,否则你只能放在类外边。应为回调函数用到函数指针。应为类内部的函数很多时候是只能在运行时才能知道具体的函数地址(VTable的原因)
------解决方案--------------------
探讨

引用:

LibPcap 啊…… 楼主在做什么啊?你看看源码的实现啊……

我在做,基于Linux的网络嗅探器。得用到libpcap库,使用QT做图形界面。
我在想想。。。
实在不行了就换GTK+

------解决方案--------------------
我google了一下
callback(u_char * user,const pcap_pkthdr *,const u_char *)的第一个参数就是
pcap_loop(pcap_t *,int,pcap_hander callback,u_char * user)的第四参数
你将本类的this作为这个参数传进去,然后在callback中就可以使用本类的方法和成员变量了

------解决方案--------------------
再声明一个静态的类指针就可以了。

探讨

大哥!static,仅仅只能够访问到static成员。难道要让我将所有的成员都定义成为static么?
在这,我需要访问父类的成员,父类的我该如何修改呢??
……
  相关解决方案