cnxh 发表于 2014-4-13 23:21:36

IARavr C++ 回调函数

各位好在c++中时回调函数是不是要加关键字,比如有个回调函数名称是"a",单这个函数不要关联到对象,如单独的 函数 void a(void),加入回调函数正常,如果关联到类名次是"b"的对象"c",如 void b:a(void),变成对象的方法时就编译出错如c.a

cnxh 发表于 2014-4-14 08:13:58

如单独的函数void a(void), M_Int2_AddIntEvent(a);这样正确
关联到类名次是"b"的对象"c", void b:a(void),M_Int2_AddIntEvent(c.a);这样错误
错误提示Error: a pointer to a bound function may only be used to call the function
int8 M_Int2_AddIntEvent(void (*SP_Event)(void))
{
}

liyang121316 发表于 2014-4-14 08:24:58

C和C++区别在哪,其中一个就是类的成员函数参数中有一个隐藏i的参数:指向对象的指针this,当你以C的方式用的时候肯定不能传给它this。如果真想在C++中用回调,那百度一下吧有些间接的解决方案可供参考。

cnxh 发表于 2014-4-14 09:04:34

谢谢,我从昨天到现在,一直在网上查找,还没解决

takashiki 发表于 2014-4-14 09:54:58

cnxh 发表于 2014-4-14 08:13
如单独的函数void a(void), M_Int2_AddIntEvent(a);这样正确
关联到类名次是"b"的对象"c", void b:a(void), ...

最简单的办法,请将方法void a(void)前面加上static,这样调用M_Int2_AddIntEvent(&被调用的类名::a);

cnxh 发表于 2014-4-14 10:40:59

takashiki 发表于 2014-4-14 09:54
最简单的办法,请将方法void a(void)前面加上static,这样调用

谢谢,加入回调的不会错了但是类的成员函数a里面有使用的私有变量会错误

cnxh 发表于 2014-4-14 10:53:52

找了篇文章里面有这么一段,就是不知道怎么加入象我这样的回调
回调函数类型 void Fun ( void *pData ,UINT uMsg )
class CFun
{
  static void StaticFun ( void *pData ,UINT uMsg )
  {
   CFun *pThisObject = ( CFun *) pData ;
   pThisObject - > Fun( uMsg ) ; / / (1)
}
  void Fun (UINT nMsg)
  {
   }
  } ;

这个是全文

cnxh 发表于 2014-4-14 11:22:08

本帖最后由 cnxh 于 2014-4-14 11:26 编辑

class ClassA { /* 真正的回调函数 */
void display(const char *text) { cout << text << endl; } /* 通过这个静态函数间接调用回调函数,需要传递具体某个对象的指针给它 */
static void wrapper_to_call_display(void ptr2object, char *text)
{
ClassA *ptr = (ClassA*)ptr2object;ptr->display(text);
}
};   /* 此函数使用用户定义的回调函数 */
void call(void *ptr2object,         void (*callback)(void *ptr2object, char *text))
{callback(ptr2object, "pass this to callback function"); }   /* 创建类 ClassA 的实例,调用 call 触发回调函数 */
void do_it() {ClassA objA;/* 把静态函数“注册”到 call 函数。注意,函数名后不跟括号 */
call((void*)&objA, ClassA::wrapper_to_call_display);
}
这个程序挺清楚的,使用无传送参数的回调函数需要定义有2个参数void call(void *ptr2object,void (*callback)(void)),而c只用一个可以了,多了个对象指针,这里不兼容,使用c和c++混合的,比较麻烦要定义2组数组
页: [1]
查看完整版本: IARavr C++ 回调函数