Frage

Ich mag ihre Verwendung missverstanden oder die Dokumentation falsch verstanden, aber wie kann ich Mitglieder einer Struktur oder Klasse zugreifen, die als leichte UserData an Lua übergeben wurde? Zum Beispiel, wenn ein Vektor die folgende Struktur verwendet

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

wurde als "Test" deklariert und als so etwas wie x = 413 und y = 612 definiert und mit einem Anruf gedrängt

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

Wie würde der Lua -Code einer Funktion, die X und Y manipuliert oder druckt, aussehen?

War es hilfreich?

Lösung

Light UserData in Lua ist nur ein Zeiger. Lua hat kein Verständnis dafür, wie der Inhalt des vom Zeiger verwiesenen Objekts liest. Der Zweck dieser Daten ist es, einen C -API -Aufruf zu ermöglichen, einen Verweis auf einen anderen API -Aufruf zu übergeben.

Wenn Sie mit Daten in Lua arbeiten möchten, müssen Sie es auf den Stapel schieben, und in Ihrem Fall würde ich es zu einer Tabelle machen. Wenn Sie diese Daten zwischen C und Lua synchronisiert benötigen, müssen Sie Funktionen in beiden Seiten schreiben, um die Zuordnung zu verarbeiten und den Wert in die andere Umgebung zu kopieren. Die andere Option besteht darin, die Daten nur in Lua zu haben und sie über eine Lua -API in C abzurufen oder sie in C zu haben und über eine C -API (die Sie erstellen würden) in Lua abzurufen.

Für mehr Informationen, Programmierung in Lua und die Lua-User Wiki Jeder hat kurze Beschreibungen.

Andere Tipps

Nichts. Sie können nicht mit userData von lua zugreifen oder mit userData tun. Sie müssen C ++ - Funktionen für alle Manipulationen bereitstellen. Dies kann natürlich durch den richtigen Einsatz von Metafunktionen erleichtert werden.

Oh, und das brauchst du nicht typedef struct Mist in C ++. Sie können einfach sagen

struct Foo {
    int x;
    int y;
};
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top