Swigは、オブジェクトを親クラスに型キャストできるようにするための関数のホスト全体を提供していることに気付きました。ただし、C ++では、次のような関数を生成できます。
A * getAnObject()
{
if(someBoolean)
return (A *) new B;
else
return (A *) new C;
}
ここで、「A」はクラス「B」と「C」の親です。次に、次のように都合のよいときに、返されたポインタを「B」タイプまたは「C」タイプに型キャストできます。
B * some_var = (B *) getAnObject();
実行時にジェネリックポインター生成関数から受け取ったオブジェクトを、ラッパーを使用してスクリプト言語で型キャストできる方法はありますか?(私の場合、Lua?)私は約100の可能なクラスの1つを生成できる関数を持っているので、C++で維持しなければならない巨大なスイッチ構造を記述したくありません。ジェネリックポインターを受け取った時点で、キャスト先のデータ型の文字列表現もあります。
何かご意見は?ありがとう!
- 編集 -
SWIGが、すべてのクラスのコピーコンストラクターを生成することを提案していることに気付きました。それらを生成させた場合、次のようなことを行うことができますか?:
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
そして、varは、継承クラスのインスタンスであることを認識している継承クラスのインスタンスになりますか?