我正在尝试在 Jack 中设置回调函数。这通常很简单,使用函数“jack_set_process_callback”(在设置“process”回调的情况下)。
API 中的定义是这样的:
int jack_set_process_callback(jack_client_t* client, JackProcessCallback process_callback, void* arg).
在示例代码(具有 C 组件)中,声明了以下全局函数。
int process(jack_nframes_t nframes, void *arg){
// do something in the callback
return 0;
}
然后通过以下行将其设置为 Jack 进程回调:
jack_set_process_callback(client, process, 0)
..这可以完美地编译和工作。
我现在正在做的是尝试构建一个基于类的音频程序。我将所有 Jack 的东西都放在一个名为“Sound_Module”的类中。
我想设置为回调的函数的定义现在是这个类的成员函数:
int Sound_Module::process(jack_nframes_t nframes, void *arg){
// do something in the callback
return 0;
}
我正在尝试将此方法设置为类构造函数中的回调函数:
(83) jack_set_process_callback(client, process, 0)
但是在编译时这会导致以下错误:
sound_module.cpp:83: error: argument of type ‘int (Sound_Module::)(jack_nframes_t, void*)’ does not match ‘int (*)(jack_nframes_t, void*)’
我从这个错误消息中得到的印象是我需要将回调函数转换为其他东西。我已经尝试了一些事情,例如强制转换为专为回调设计的 Jack 类型,但没有运气 - 下面是从 API 中为“JackProcessCallback”挖出的行。
typedef int(* JackProcessCallback)(jack_nframes_t nframes, void *arg)
谁能阐明这个编译器错误可能暗示什么,或者我可能做错了什么?
谢谢!