我有一个带有原型的c库函数:
int setCallback(void* callback_function);
它可以接受匹配的c函数
int myCallback(int x);
setCallBack(myCallback); // register function as callback
现在,我想在c ++项目中使用此c库,并使其调用命名空间中定义的c ++函数。但是,传递等效的c ++函数会给出g ++ 5.4.0的错误:
setCallBack(myCPPCallBack); // ERROR!
invalid conversion from ‘int (*)(int)’ to ‘void*’ [-fpermissive]
我可以通过下面的强制转换来构建和运行它。
setCallBack((void*)myCPPCallBack);
我的问题是,这种不确定的行为还是其他不明智的做法?有什么风险,还有其他选择吗?