Pregunta

Puedo estar malinterpretando su uso o interpretar mal la documentación, pero ¿cómo accedo a los miembros de una estructura o clase pasada a Lua como Data de usuario ligero? Por ejemplo, si un vector usa la siguiente estructura

typedef struct Foo {
  int x;
  int y;
} Foo;

fue declarado como 'prueba' y definido como algo como x = 413 e y = 612, y se empujó con una llamada

lua_pushlightuserdata( L, (void *) &test ) ;

¿Cómo se vería el código LUA de una función que manipula o imprime X e Y?

¿Fue útil?

Solución

Light UserData en Lua es solo un puntero. Lua no entiende cómo leer el contenido del objeto referenciado por el puntero. El propósito de estos datos es permitir que una llamada de API C pase una referencia a otra llamada API.

Si desea trabajar con datos en Lua, debe empujarlo a la pila y, en su caso, lo convertiría en una tabla. Si necesita estos datos sincronizados entre C y LUA, deberá escribir funciones en ambos lados para manejar la asignación y copiar el valor al otro entorno. La otra opción es solo tener los datos en LUA y recuperarlos a través de una API LUA cuando está en C, o tenerlos en C y recuperarlos a través de una API C (que crearía) cuando esté en Lua.

Para más información, Programación en Lua y el Wiki de los usuarios de Lua Cada uno tiene breves descripciones.

Otros consejos

Nada. No puede acceder o hacer nada con UserData de ningún tipo de LUA. Debe proporcionar funciones de C ++ para toda la manipulación. Por supuesto, esto puede ser más fácil mediante el uso correcto de metafunciones.

Ah, y no necesitas eso typedef struct basura en C ++. Puedes decir

struct Foo {
    int x;
    int y;
};
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top