Quindi, sto usando l'API FMOD ed è davvero un C api.C callback delle funzioni API nel codice funzione membro C++
Non è male o altro. Solo che non si interfaccia bene con il codice C++.
Ad esempio, utilizzando
FMOD_Channel_SetCallback(channel, callbackFunc) ;
Vuole una funzione C-stile per callbackFunc
, ma voglio passare una funzione membro di una classe.
Ho finito per utilizzare il trucco Win32 per questo, rendendo la funzione membro statica. Funziona quindi come una richiamata in FMOD.
Ora devo suddividere il mio codice per rendere statici alcuni membri, solo per tenere conto della C-nità di FMOD.
Mi chiedo se è possibile in FMOD o se c'è un problema attorno a collegare il callback a una funzione membro di istanza dell'oggetto C++ specifico (non una funzione statica). Sarebbe molto più agevole.
+1 Sì, devi fare un trampolino, ma sono così nodosi (se vuoi evitare i globali, e tutto il resto)! :-(Se l'API è stata progettata correttamente in primo luogo .... –
Devi anche preoccuparti di cosa fare se le funzioni del membro C++ vengono generate. E da dove viene questo termine "trampolino"? –
@NeilButterworth - I non ricordo dove ho sentito per la prima volta questo descritto come un "trampolino", ma un riferimento per il mio utilizzo è Wikipedia (http://en.wikipedia.org/wiki/Trampoline_%28computers%29) 'Quando si interfacciano pezzi di codice con Convenzioni di chiamata incompatibili, un trampolino viene utilizzato per convertire la convenzione del chiamante nella convenzione del callee. –