void* 與成員函數指標之間的轉換
使用C/C 互通性時,嘗試轉換時可能會遇到困難位於void 指標和指向成員函數的指標之間。在處理像 Lua 這樣的語言中的閉包時,經常會出現這個問題,其中使用者資料儲存為 void 指標。
問題:
將 void* 轉換為指向 a 的指標C 中的成員函數由於記憶體表示的根本差異而無效。指向成員的指標包含無法透過常規指標存取的附加資訊。
解決方案:
要解決此問題,請考慮以下選項:
1。將成員函數包裝在自由函數中:
程式碼片段:
<code class="cpp">int call_int_function(lua_State *L) { void (*method)(T*, int, int) = reinterpret_cast<void (*)(T*, int, int)>(lua_touserdata(L, lua_upvalueindex(1))); T *obj = reinterpret_cast<T *>(lua_touserdata(L, 1)); method(obj, lua_tointeger(L, 2), lua_tointeger(L, 3)); return 0; }</code>
2.使用函數物件:
其他注意事項:
以上是如何在 void* 指標和 C 中成員函數指標之間進行轉換?的詳細內容。更多資訊請關注PHP中文網其他相關文章!