Я пытаюсь установить функцию обратного вызова в Джеке. Обычно это довольно просто, используя функцию «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)
.. и это компилируется и работает отлично.
То, что я сейчас делаю, - это попытка создать аудиопрограмму на основе классов. Я помещаю все вещи Джека в класс с образным названием «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)
Может кто-нибудь пролить свет на то, на что может указывать ошибка компилятора, или на то, что я могу делать неправильно?
Спасибо!