我注意到 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?)我有一个函数可以生成大约一百个可能的类中的一个,我想避免编写必须在 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 成为知道它是继承类的实例的继承类的实例?