Por lo tanto, estoy usando la api FMOD y realmente es una API C.Retrollamadas de la función C API en C++ código de función de miembro
No es malo o lo que sea. Es solo que no se combina bien con el código C++.
Por ejemplo, el uso de
FMOD_Channel_SetCallback(channel, callbackFunc) ;
Quiere una función de estilo C para callbackFunc
, pero quiero pasarlo a una función miembro de una clase.
Terminé usando el truco de Win32 para esto, haciendo que la función de miembro estética. Luego funciona como una devolución de llamada a FMOD.
Ahora tengo que hackear mi código para hacer algunos de los miembros estáticos, solo para dar cuenta de la C-dad de FMOD.
Me pregunto si es posible en FMOD o si hay un problema para vincular la devolución de llamada a una función de miembro de instancia de objeto de C++ específica (no una función estática). Sería mucho más suave.
+1 Sí, tienes que hacer un trampolín, pero son tan retorcidos (si quieres evitar los globales, y todo eso). :-(Si la API se diseñó correctamente, en primer lugar ... –
También debe preocuparse por qué hacer si las funciones miembro de C++ arrojan. ¿Y de dónde viene este término "trampolín"? –
@NeilButterworth - I No recuerdo dónde escuché por primera vez que se describía como un "trampolín", pero una referencia para mi uso es Wikipedia (http://en.wikipedia.org/wiki/Trampoline_%28computers%29) 'Cuando se interconectan piezas de código con convenciones de llamadas incompatibles, un trampolín se usa para convertir la convención de la persona que llama en la convención de la persona que llama. –