如何通过派生的Python swig对象访问C++基类函数?
我有一个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对象。