문제

테이블 세트에 비교적 깊은 기능이 있습니다. C/C ++에는 해당 함수에 대한 "참조"를 얻고 사용해야 할 때 스택에 (및 args)를 밀어 넣을 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

이것이 바로 참조 시스템 입니다. 함수 호출 r = luaL_ref(L, LUA_REGISTRYINDEX) 레지스트리에 스택 상단에 값을 저장하고 C 측에 저장할 수있는 정수를 반환하고 함수 호출로 값을 검색하는 데 사용됩니다. lua_rawgeti(L, LUA_REGISTRYINDEX, r).

참조 필 장, 문서뿐만 아니라 luaL_ref(), lua_rawgeti(), 그리고 luaL_unref() 전체 이야기를 위해.

다른 팁

Lua API (http://www.lua.org/manual/5.1/manual.html#3) 원하는 테이블 멤버를 사용하는 데 사용될 수 있습니다. lua_gettable ()을 사용하여 테이블 멤버를 추출하여 Lua 스택에 놓으십시오. 멤버도 테이블이라면 Lua_getTable ()을 다시 전화 하여이 테이블에 액세스하는 등 ...

(Lua_Rawget ()에 따라 lua_gettable ()보다 더 나은 선택 일 수 있습니다.

의견에 대한 응답으로 추가 :

좋아요 조금 더 흥미 롭습니다. 테이블은 참조 객체 (다소)이므로 어딘가에 가장 안쪽 테이블 참조를 저장하는 것이 안전 할 것입니다.

LUA API는 어쨌든 테이블 심판을 직접 조작 할 필요가 없으므로 심판을 글로벌로 밀어야 할 것입니다. 또는 단일 테이블 항목으로 새 테이블이 작동하지 않으면 아마도 가능합니다. 나중에 심판을 원할 때 글로벌에서 가져 오십시오.

예를 들어

// Final table reference is now at top of stack, after multiple dereferences
lua_setglobal( L, "mytableref" );
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top