2

我正在使用一个用 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,但似乎虽然我可以获得类型标识符,但我无法获得任何其他类型信息,例如大小或指向基类的指针。

4

0 回答 0