获取指向SWIG对象基类的指针

时间:2013-03-11 12:59:09

标签: c++ python callback swig

我使用的是用C ++编写的库,并通过SWIG暴露给Python。类层次结构如下所示:

PublicLib:
   MyBaseClass

PrivateLib:
   MyAbstractClass

   SomePrivateSubclass : MyAbstractClass, MyBaseClass
...

请注意这里的多重继承方案。另请注意,PublicLib和PrivateLib中的类都以Python对象的形式向我公开。

现在,我想在另一个库中调用C ++函数,将指针传递给SomePrivateSubClass个对象之一。该函数如下所示:

void RegisterCallback(void* param);

然后,我希望我将通过回调接收对象,即:

void SomeCallback(void* param) {
    MyBaseClass& cls = *(MyBaseClass*)param;
    cls.xxxx; // FAIL
}

它失败的原因是我收到的指针不是基类(MyBaseClass),而是其中一个子类。在“普通”C ++中,我会做类似的事情:

void RegisterCallback(MyBaseClass* param) { ... }

void SomeCallback(void* param) {
    MyBaseClass& cls = *(MyBaseClass*)param;
    cls.xxxx; // FAIL
}

并且编译器会为我处理所有这些。

问题是,在这种情况下,有什么方法可以获得指向基类的指针吗?我可以在Python端操作代码,但SWIG似乎没有办法转换为基类(我可以看到)。我也试过使用RTTI,但似乎虽然我可以获得类型标识符,但我无法获取任何其他类型信息,例如基类的大小或指针。

0 个答案:

没有答案