如何通过派生的Python swig对象访问C++基类函数?

2 投票
2 回答
518 浏览
提问于 2025-04-18 17:13

我有一个C++类,叫做B,它是公开继承自另一个类A。

这个B类通过swig工具处理后,可以在Python中使用。 这非常顺利,B类中定义的所有公共函数在Python中几乎不需要任何额外工作就可以直接使用。

但是,当我在Python中创建一个B对象时,发现类A中定义的公共函数似乎没有自动暴露出来,无法使用。

问题是,如何才能在swig处理后的Python对象中访问到C++类层次结构中的函数呢?

2 个回答

2

你应该可以轻松搞定这个。这里有一些来自 http://www.swig.org/Doc1.3/Python.html#Python_nn21 的文档。

31.3.8 C++ 继承

SWIG 对 C++ 继承相关的问题非常了解。因此,如果你有这样的类:

class Foo {
...
};

class Bar : public Foo {
...
};

这些类会被包装成一个 Python 类的层次结构,反映出相同的继承结构。所有常用的 Python 工具函数都可以正常使用:

3

看起来问题出在swig接口文件中包含文件的顺序上。

把基类的头文件放在派生类之前,所有东西就开始按预期工作了。

对于那些在使用“swig”的人来说,看到这个警告;

warning 401: 'AnObjectXXX' must be defined before it is used as a base class.

会让你得到一个没有预期基类功能的python对象。

撰写回答