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

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

Quale sarebbe il codice Lua di una funzione che manipola o stampe x e y guardare come?

È stato utile?

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;
};
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top