Frage

Bei der Herstellung von Lua-Bindings für C ++ Klassen, soll ich wieder Tabellen oder Benutzerdaten-Objekte?

Kennt jemand eine der Vor- und Nachteile der jeweiligen Methode?

War es hilfreich?

Lösung

Ich empfehle Rückkehr Userdaten. Unabhängig von Ansatz, muss es irgendwo sein, den Zeiger zu setzen auf die Daten C ++, oder die selbst tatsächlichen C ++ Daten, und es gibt nirgendwo Safe dies mit einer Tabelle zu tun.

Tabellen Rückkehr Sinn in einigen Situationen machen würde, weil sie es können ‚Kommentierte‘ in Lua werden mit zusätzlichen Attribute ohne eine hat das zu tun nichts extra unterstützen dies. Leider ist die C ++ Objektzeiger gehen muss irgendwo, und es gibt nirgendwo sinnvoll, es anderen zu gehen als ein aktueller Eintrag in der Tabelle selbst.

Dies ist nicht ein sehr sicherer Ort für sie zu gehen. Es kann von Lua finden Code und entfernt oder ersetzt. Dies könnte durch Zufall sein, oder auf Zweck ist es nicht wirklich wichtig sind.

deshalb Meine Präferenz ist Userdata Objekte zurückzukehren. Sie können sein hergestellt wie Tabellen zu arbeiten, wenn man wirklich auf das, bestehen müssen, sondern sie hat auch einen „geheimen“ Bereich (die eigentlichen Benutzerdaten selbst), wo die C ++ Objektzeiger gespeichert werden, sicher vor durch Lua Code zu überschreiben.

(Userdata- Objekte auch eine „Umwelt“ Zeiger haben, die eine andere ist platzieren objektspezifische Daten zu speichern. Wie bei der Benutzerdaten Nutzlast selbst, ist dieser Wert auf Lua Code unzugänglich und nicht beschädigt werden kann auf diese Weise.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top