2012-01-29 7 views
6

En el ejemplo de código: http://lua-users.org/wiki/SimplerCppBindingportar a Lua 5.2, LUA_GLOBALSINDEX problemas

No es el código:

lua_pushstring(L, T::className); 
lua_pushvalue(L, methods); 
lua_settable(L, LUA_GLOBALSINDEX); //<--- LUA_GLOBALSINDEX removed in Lua 5.2 

lua_pushliteral(L, "__metatable"); 
lua_pushvalue(L, methods); 
lua_settable(L, metatable); 

En Lua 5.2, LUA_GLOBALSINDEX ya no existe. En cambio, tiene lua_setglobal() y lua_getglobal().


Estoy en lo correcto al pensar que:

lua_pushvalue(L, methods); 
lua_setglobal(L, T::className); 

... sea el repuesto correcto para:

lua_pushstring(L, T::className); 
lua_pushvalue(L, methods); 
lua_settable(L, LUA_GLOBALSINDEX); 

soy demasiado nuevo en Lua para estar seguro, no he Lo usé por 8 meses. En cuanto a la documentación, estoy pensando esto es correcto, pero me gustaría la verificación.

Respuesta

4

En lugar de lua_settable(L,LUA_GLOBALSINDEX); use lua_setglobal(L,T::className);. Eso funciona tanto en Lua 5.1 como en 5.2.

+0

Sí, pero ¿estoy usando lua_setglobal() correctamente? lua_pushvalue (L, métodos); lua_setglobal (L, T :: className); –

+0

@ComServant, si 'T :: className' es un' char * ', entonces sí. ¿No está funcionando? – lhf