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中文网其他相关文章!