IARavr C++ 回调函数
各位好在c++中时回调函数是不是要加关键字,比如有个回调函数名称是"a",单这个函数不要关联到对象,如单独的 函数 void a(void),加入回调函数正常,如果关联到类名次是"b"的对象"c",如 void b:a(void),变成对象的方法时就编译出错如c.a 如单独的函数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))
{
} C和C++区别在哪,其中一个就是类的成员函数参数中有一个隐藏i的参数:指向对象的指针this,当你以C的方式用的时候肯定不能传给它this。如果真想在C++中用回调,那百度一下吧有些间接的解决方案可供参考。 谢谢,我从昨天到现在,一直在网上查找,还没解决 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); takashiki 发表于 2014-4-14 09:54
最简单的办法,请将方法void a(void)前面加上static,这样调用
谢谢,加入回调的不会错了但是类的成员函数a里面有使用的私有变量会错误 找了篇文章里面有这么一段,就是不知道怎么加入象我这样的回调
回调函数类型 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: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]