Ich stelle fest, dass Swig eine ganze Reihe von Funktionen bietet, um Objekte in ihre übergeordneten Klassen typisieren zu können. Jedoch ist in C++ eine Funktion wie folgt herstellen kann:Swig Typumwandlung in abgeleitete Klasse?
A * getAnObject()
{
if(someBoolean)
return (A *) new B;
else
return (A *) new C;
}
wobei „A“ der Haupt der Klassen „B“ und „C“. Man kann dann typisierte die Zeiger wieder in seine ein Typ „B“ oder „C“ an einem der Bequemlichkeit wie:
B * some_var = (B *) getAnObject();
Gibt es irgendeine Weise, die ich ein Objekt typisieren kann ich von einem generic-Zeiger- erhalten Funktion zur Laufzeit in der Skriptsprache unter Verwendung der Wrapper erzeugen? (In meinem Fall, Lua?) Ich habe eine Funktion, die eine von etwa hundert möglichen Klassen erzeugen könnte, und ich möchte vermeiden, eine enorme Switch-Struktur zu schreiben, die ich in C++ führen müsste. An dem Punkt, an dem ich den generischen Zeiger erhalte, habe ich auch eine String-Darstellung des Datentyps, in den ich ihn umwandeln möchte.
Irgendwelche Gedanken? Vielen Dank!
- EDIT -
Ich bemerke, dass SWIG Kopierkonstruktoren für alle meine Klassen generieren bietet. Hätte ich es diejenigen erzeugen, konnte ich etwas tun, wie folgt aus ?:
var = myModule.getAnObject(); -- Function that returns an object type-cast down to a pointer of the parent class, as in the function getAnObject() above.
var = myModule.ClassThatExtendsBaseClass(var); -- A copy constructor that SWIG theoretically creates for me
und haben var dann eine Instanz der Klasse inheriting sein, dass weiß, dass es eine Instanz der Klasse ist inheriting?
Die übliche Lua-Konvention für Fehlerrückgaben ist die Rückgabe von nil, "message", wo Sie einen numerischen Code und eine Nachricht zurückgeben.Die Rückgabe von nil erweist sich als sehr einfach, um von jedem anderen "gültigen" Rückgabewert auf der Lua-Seite zu unterscheiden, daher das Idiom. Es ist auch das Muster, das von vielen der Kernmodule gefolgt wird. Alternativ können Sie stattdessen luaL_error() verwenden, da ein Fehler bei der Typbenennung wahrscheinlich ein schwerwiegendes Problem ist. Einzelheiten finden Sie unter http://www.lua.org/manual/5.1/manual.html#luaL_error. – RBerteig
Ich erkenne keine Lecks, aber fühle mich in den SWIG-Interna nicht genug um das zu bestätigen ;-) – RBerteig