gpt4 book ai didi

c++ - 指向 SDL 音频回调的成员函数的指针?

转载 作者:太空宇宙 更新时间:2023-11-04 16:20:55 26 4
gpt4 key购买 nike

我正在使用 SDL 1.2.15 播放来自 libav (ffmpeg) 的音频,如本例所示 here .

我已经声明了一个播放声音的类。但现在我必须在 SDL_AudioSpec::callback 中存储回调函数的指针(在示例 wanted_spec.callback 中)。但是我的回调是我类(class)的成员。

SDL中的回调指针是:

void (SDLCALL *callback)(void *userdata, Uint8 *stream, int len);

其中 SDLCALL__cdecl

如何在我的 wanted_spec_.callback 中存储成员函数的指针?

最佳答案

如果您想使用非静态成员函数来处理回调,您需要提供转发函数并将 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;

关于c++ - 指向 SDL 音频回调的成员函数的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16838920/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com