Userdate wie eine Tabelle in Lua behandeln

8

Ich habe einige Klassen in C ++, die ich Lua zeigen möchte. Ich kann Widget:New() aufrufen, um return userdata mit einem metatablen Set zur Tabelle WidgetMeta zu bekommen. WidgetMeta hat alle C ++ Funktionen und es ist __index ist auf sich selbst gesetzt, also kann ich das machen:

%Vor%

Das ist alles ziemlich einfach.

Hier ist der Teil, den ich nicht herausfinden kann. Ich möchte in der Lage sein, Lua definierte Variablen und Funktionen auf meine Benutzerdaten zu legen, als wäre es eine Tabelle. Dies kann nicht direkt offensichtlich getan werden. Ich kann es nicht auf die Userdata fallen lassen, weil ich möchte, dass es pro Userdata eindeutig ist.

%Vor%

Mein aktueller Angriffsplan sieht vor, dass das Metatable eine spezielle Tabelle enthält, die zwischen Benutzerdaten und Tabelle mappt, wo ich Funktionen und Variablen pro Benutzer speichern kann. Das Problem ist, dass ich nicht sicher bin, was der beste Weg ist, das zu tun, oder ob es eine bessere Lösung gibt. meine Frage ist also zweifacher Art: Wenn ich meine Metadioden __index und __newindex einrichte, schreibe ich sie in Lua-Code in eine Textdatei und führe sie aus, bevor ich den Rest der Dinge ausführe, oder lege ich den Lua-Code direkt von einem C ab string in meinem Programm über luaL_loadstring, oder mache ich das mit der C-Schnittstelle und behandle alle Stapelmanipulationen? und zweitens, wie schreibe ich diese Funktion ... aber ich werde mich darum kümmern, wenn ich erst einmal entschieden habe, welcher der beste Weg ist.

    
Alex 26.07.2010, 05:48
quelle

2 Antworten

9

Fügen Sie den Benutzerdaten eine Funktionsumgebung hinzu und leiten Sie den Zugriff darauf um.

Hier ist ein alter Code von mir, der den Prozess beschreibt.

%Vor%     
jsimmons 26.07.2010, 07:29
quelle
0

Sie sollten sich wirklich tolua ++ ansehen, das ein sehr ähnliches Konzept hat. Alle von lua erstellten userdata-Objekte verfügen über eine versteckte Tabelle zum Speichern ihrer Eigenschaften.

Dieser Abschnitt des Handbuchs beschreibt es: Ссылка

    
user258607 28.07.2010 17:00
quelle

Tags und Links