说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

如何将类成员函数作为回调函数

编辑:说三道四文库 发布时间:2018-05-27 04:17
HTML文档下载 WORD文档下载 PDF文档下载
ghy_2010 于 2010-12-01 16:35:27 编辑 "A.h"                                                
typedef void(* CB)(* char);                           
                                                      
class CA                                              
{                                                        
   CB m_pCbkFun;                                     
   char m_arr[10];
}                                                     
      
"A.cpp"

void CA::fa1(CB * pCbkFun)                            
{                                                       
  m_pCbkFun = pCB;                                   
}
                                                      
void CA::fa2()                                        
{                                                       
   m_ pCbkFun(m_arr)                                  
}

 "B.h"
#include "A.h"
class CB
{
  CA  a;
}

"B.cpp"
void CB::fb1(char * pf)
{
   ......
}

void CB::fb2()
{
   a.fa1(fb1);
}

红色字体处编译出错,好像是不能将类的成员函数作为实参。
改成全局或静态的就可以,但不想这么做,因为CB::fb1要访问类的非静态成员函数。
就要这个效果用什么办法可以实现?
有什么问题吗?
引用 1 楼 jacklzw88 的回复:
有什么问题吗?


sorry,刚刚编辑过!
再看下!
那用虚函数吧。
或者你可以吧类的指针传给CB::fb1
引用 3 楼 jacklzw88 的回复:
那用虚函数吧。


具体说说!
引用 5 楼 ghy_2010 的回复:
引用 3 楼 jacklzw88 的回复:

那用虚函数吧。


具体说说!

你还是用我说的第二种方法吧。把你要用类指针传到回调函数里去。
1.使用静态成员来作为回调。
2.使用接口,即虚函数来实现。
直接传入指针,就能实现楼主的要求呀。没有必要用回调吧。
楼主应该弄清楚类成员函数和类静态函数与全局函数的区别。
类成员函数编译器其实隐藏了一个参数是类的指针,这样类成员函数与同样定义的类静态函数和全局函数的接口是不同的。
static __stdcall 之类的。
引用 9 楼 jennyvenus 的回复:
static __stdcall 之类的。
没错
用静态函数可以
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘