Accesso userdata luce in Lua
-
26-10-2019 - |
Domanda
I può essere equivoco il loro uso o letto male la documentazione, ma come faccio ad accedere membri di una struttura o di classe passata a Lua come userdata luce? Per esempio, se un vettore utilizzando il seguente struct
typedef struct Foo {
int x;
int y;
} Foo;
è stata dichiarata come 'test' e definito come qualcosa di simile a x = 413 ey = 612, e ha spinto con una chiamata ??p>
lua_pushlightuserdata( L, (void *) &test ) ;
Quale sarebbe il codice Lua di una funzione che manipola o stampe x e y guardare come?
Soluzione
userdata luce in Lua è solo un puntatore. Lua non ha alcuna comprensione di come leggere il contenuto dell'oggetto a cui fa riferimento il puntatore. Lo scopo di questi dati è di consentire una chiamata API C per passare un riferimento a un'altra chiamata API.
Se si desidera lavorare con i dati in Lua, è necessario spingere in pila, e nel tuo caso mi rendono un tavolo. Se avete bisogno di questi dati sincronizzati tra C e Lua, quindi avrete bisogno di scrivere funzioni in entrambi i lati per gestire l'assegnazione e copiare il valore per l'altro ambiente. L'altra opzione è quella di avere i dati contenuti in Lua e recuperare tramite un API Lua quando in C, o di averlo in C e recuperarlo attraverso un'API C (che si creerebbe) quando in Lua.
Per ulteriori informazioni, Programmazione in Lua e la Lua-utenti Wiki hanno ciascuno una breve descrizione.
Altri suggerimenti
Niente. Non è possibile accedere o fare qualsiasi cosa con userdata di qualsiasi tipo da Lua. È necessario fornire funzioni C ++ per tutte le manipolazioni. Naturalmente, questo può essere reso più facile attraverso il corretto utilizzo dei METAFUNCTIONS.
Oh, e non hai bisogno di quella merda typedef struct
in C ++. Si può solo dire che
struct Foo {
int x;
int y;
};