Итак, я использую FMOD api, и это действительно C api.Функция вызова функции API C в код функции члена C++
Не то чтобы это плохо или что-то еще. Его просто не очень хорошо взаимодействует с кодом на C++.
Например, с помощью
FMOD_Channel_SetCallback(channel, callbackFunc) ;
Он хочет функцию C-стиль для callbackFunc
, но я хочу, чтобы передать его функции-члена класса.
В итоге я использовал трюк Win32 для этого, делая функцию-член статической. Затем он работает как обратный вызов в FMOD.
Теперь мне нужно взломать мой код, чтобы сделать некоторые из членов статическими, просто для учета COD.
Интересно, возможно ли это в FMOD или если есть работа, связанная с обратным вызовом на конкретную функцию экземпляра объекта C++ (а не статическую функцию). Это было бы намного более гладко.
+1 Да, вам нужно сделать батут, но они такие суровые (если вы хотите избежать глобалов и всего этого)! :-(Если API был спроектирован правильно, в первую очередь .... –
Вам также нужно беспокоиться о том, что делать, если функции члена C++ выбрасываются. И откуда взялся этот термин «батут»? – 2010-03-10 20:43:54
@NeilButterworth - I не помню, где я впервые услышал это как «батут», но одна ссылка для моего использования - Wikipedia (http://en.wikipedia.org/wiki/Trampoline_%28computers%29) 'При взаимодействии фрагментов кода с несовместимые соглашения о вызовах, батут используется для преобразования конвенции вызывающего абонента в конвенцию вызываемого. ' –