指向 SDL 音频回调的成员函数的指针?
Posted
技术标签:
【中文标题】指向 SDL 音频回调的成员函数的指针?【英文标题】:Pointer to member-function for SDL audio callback? 【发布时间】:2013-05-30 14:31:28 【问题描述】:我正在使用 SDL 1.2.15 播放来自 libav (ffmpeg) 的音频,如本例中的 here。
我已经声明了一个播放声音的类。但现在我必须在SDL_Audiospec::callback
中存储回调函数的指针(在示例中为wanted_spec.callback
)。但我的回调是我班的成员。
SDL 中的回调指针为:
void (SDLCALL *callback)(void *userdata, Uint8 *stream, int len);
其中SDLCALL
是__cdecl
。
如何在我的wanted_spec_.callback
中存储成员函数的指针?
【问题讨论】:
【参考方案1】:如果您想使用非静态成员函数来处理回调,您需要提供转发函数并将userdata
设置为指向目标对象的指针。
struct CallbackObject
void onCallback(Uint8 *stream, int len)
// ....
static void forwardCallback(void *userdata, Uint8 *stream, int len)
static_cast<CallbackObject*>(userdata)->onCallback(stream, len);
;
SDL_AudioSpec audio;
CallbackObject callbackObject;
audio.callback = CallbackObject::forwardCallback;
audio.userdata = &callbackObject;
【讨论】:
非常聪明!很好的解决方案。以上是关于指向 SDL 音频回调的成员函数的指针?的主要内容,如果未能解决你的问题,请参考以下文章