所以,我使用FMOD API,它確實是一個C API。C API函數回調到C++成員函數代碼
這不是那麼糟糕或什麼。它只是它不能很好地與C++代碼進行交互。
例如,使用
FMOD_Channel_SetCallback(channel, callbackFunc) ;
它希望callbackFunc
C風格的功能,但我想它傳遞一個類的成員函數。
我結束了使用Win32技巧,使成員函數靜態。然後它作爲FMOD的回調。
現在我必須破解我的代碼,使一些成員靜態,只是爲了解釋FMOD的C-ness。
我不知道它是否可能在FMOD中,或者是否有解決方法將回調鏈接到特定的C++對象的實例成員函數(而不是靜態函數)。它會更光滑。
+1是的,你必須做一個蹦牀,但它們非常粗糙(如果你想避免全局和所有這些)! :-(如果API的設計正確的話...... – 2010-03-10 20:38:02
如果C++成員函數拋出,你還需要擔心該怎麼做。這個「蹦牀」術語從何而來? – 2010-03-10 20:43:54
@NeilButterworth - I不要回想起我第一次聽到這種描述爲「蹦牀」的地方,但我的用法的一個參考是維基百科(http://en.wikipedia.org/wiki/Trampoline_%28computers%29)'當將部分代碼與不兼容的調用約定,蹦牀用於將調用者的約定轉換爲被調用者的慣例。' – 2010-03-10 21:52:19