0

我的回调原型为:

typedef void (*update)(int id,...);
typedef void (*destroy)(int id,...);
typedef void (*create)(int id, update* _update, destroy* _destroy);

而不是创建回调函数:

void updateCB(int id,...){/*Add id to collection*/}
void destroyCB(int id,...){/*Remove id from collection*/}
void createCB(int id,update* _update, destroy* _destroy)
{
     //Register Callbacks
     *_update = updateCB; 
     *_destroy = destroyCB;
}

当我注册回调编译器给我错误:

错误:无法将 'ClassName::updateCB' 从类型 'void (ClassName::)(int,...)' 转换为类型 'update {aka void (*)(int..)}'

如何有效注册回调?

4

1 回答 1

2

您正在尝试使用在这种情况下不可能的成员函数。发生这种情况是因为每个成员函数(如果它不是静态的)都带有指向名为this的类实例的隐藏指针。您需要使用全局函数或静态成员函数。

于 2013-05-03T11:49:12.317 回答