void*와 멤버 함수에 대한 포인터 사이의 캐스팅
C/C 상호 운용성 작업 시 캐스팅을 시도할 때 어려움을 겪을 수 있습니다. void 포인터와 멤버 함수에 대한 포인터 사이. 이 문제는 사용자 데이터가 void 포인터로 저장되는 Lua와 같은 언어에서 클로저를 처리할 때 자주 발생합니다.
문제:
void*를 포인터로 캐스팅 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. 함수 개체 사용:
기타 고려 사항:
위 내용은 C에서 void* 포인터와 멤버 함수에 대한 포인터 사이를 캐스팅하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!