У меня есть небольшая проблема с использованием библиотеки, которая получает изображения с CMOS-камеры. Библиотека позволяет использовать функцию потока, и у меня есть три точки доступа для установки (три делегата), когда я получаю изображение, когда изображение удаляется и когда появляется ошибка.C делегат на C++
typedef void(* StreamCallbackPtr)(IMAGE *image);
typedef void(* StreamErrorCallbackPtr)();
typedef void(* StreamFrameDroppedCallbackPtr)();
int Stream_Start(DEVICE device, IMAGEFORMAT format, StreamCallbackPtr stream_callback, StreamFrameDroppedCallbackPtr f_dropped_callback, StreamErrorCallbackPtr error_callback);
Я ввожу StreamCallbackPtr как только изображение будет готово на камеру, но имейте в виду, что у меня нет никаких способов изменения кода библиотеки.
И вот вопрос: как подключить собственный делегат на C++? Допустим, я использую эту функцию потока внутри класса, я знаю, что у меня есть как минимум два варианта; обертка и глобальные переменные. Первый кажется скомпрометированным, поскольку я не могу передать ничего, кроме IMAGE
, и я хочу избежать использования глобальных переменных (в этом случае это были бы статические члены).
Любые идеи?
Это должно помочь вам: http://stackoverflow.com/questions/14395192/why-does-c11-not-support-declaring-extern-c-on-a-static-member-function –