bob*_*obo 10 c c++ fmod static-functions
所以,我正在使用FMOD api,它确实是一个C api.
不是那个坏或什么的.它只是它与C++代码没有良好的接口.
例如,使用
FMOD_Channel_SetCallback( channel, callbackFunc ) ;
Run Code Online (Sandbox Code Playgroud)
它想要一个C风格的函数callbackFunc,但我想传递一个类的成员函数.
我最终使用Win32技巧,使成员函数静态.然后它作为FMOD的回调.
现在我必须破解我的代码以使一些成员静态,只是为了解释FMOD的C-ness.
我想知道它是否可能在FMOD中或者是否有解决方法将回调链接到特定C++对象的实例成员函数(不是静态函数).它会更顺畅.
R S*_*hko 12
您无法直接传递成员函数.成员函数具有隐式参数,this而C函数则没有.
你需要创建一个蹦床(不确定回调的签名,所以这里只做一些随机的事情).
extern "C" int fmod_callback( ... args ...)
{
return object->member();
}
Run Code Online (Sandbox Code Playgroud)
一个问题是该对象指针来自何处.希望fmod为您提供一个通用的上下文值,在您进行回调时将提供给您(然后您可以传入对象指针).
如果没有,您只需要将其设置为全局访问它.
我猜它应该这样工作:
您可以通过调用将一些用户数据分配给频道FMOD_Channel_SetUserData.此用户数据应该是指向处理事件的C++对象的指针.然后你应该编写C风格的回调函数,通过调用提取该对象FMOD_Channel_GetUserData,然后在该对象上调用C++实例方法.