2009-09-13 2 views
13

함수를 테이블 집합에 상대적으로 중첩시켜 있습니다. C/C++에서 그 함수에 대한 "참조"를 얻고 그것을 사용할 필요가있을 때 (그리고 args) 스택에 밀어 넣는 방법이 있습니까?C/C++의 Lua 함수에 대한 참조

답변

20

여기가 reference system입니다. 함수 호출 r = luaL_ref(L, LUA_REGISTRYINDEX)은 스택의 맨 위에있는 값을 레지스트리에 저장하고 C 측에 저장할 수있는 정수를 반환하고 lua_rawgeti(L, LUA_REGISTRYINDEX, r)이라는 함수 호출로 값을 검색하는 데 사용됩니다.

자세한 내용은 PiL chapterluaL_ref(), lua_rawgeti()luaL_unref()의 설명서를 참조하십시오.

2

Lua API (http://www.lua.org/manual/5.1/manual.html#3)를 사용하여 원하는 테이블 구성원을 처리 할 수 ​​있습니다. lua_gettable()을 사용하여 테이블 멤버를 추출하고 lua 스택에 배치하십시오. 멤버가 테이블이라면이 테이블에 액세스하기 위해 lua_gettable()을 다시 호출하는 등등 ...

lua_rawget을하고 다시 '()보다 더 나은 선택이 될 수도 lua_gettable()) Addtional

응답에 대해 언급하기 :

이 좋아하는 좀 더 흥미 롭군요. 글쎄, 테이블은 참조 오브젝트 (다소간)이므로 가장 안쪽 테이블 참조를 어딘가에 저장하는 것이 안전 할 것입니다.

lua API는 table ref를 직접 조작 할 수있는 것 같지 않으므로 ref를 전역으로 푸시해야하거나 단일 테이블 항목이있는 새 테이블을 작동하지 않을 수 있습니다. 나중에 참조를 원하면 전역에서 가져 오기만하면됩니다.

// Final table reference is now at top of stack, after multiple dereferences 
lua_setglobal(L, "mytableref"); 
+0

나는 그 방법을 이미 알고있다. 나는 중첩 된 방법으로 테이블에서 깊이 참조 된 함수를 얻고 싶다. 그래서 나중에 모든 테이블을 가로 지르지 않고 함수를 호출 할 수있다. – jameszhao00

+0

[답변에 추가됨] –

관련 문제