3

我有一些通过SWIG接触过Python的 C++ 。其中有一个具有单个纯虚函数的基类。

在 Python 中,我导入了我的模块并定义了一个使用抽象类作为基础的类。

import mymodule
class Foo(mymodule.mybase):
    ...

在该模块中也是一个管理器类,我想将我新定义的类添加到管理器中。

m = mymodule.mymanager()
m.add(Foo())

添加的定义:

void add(mybase* b) { ... }

没有像我预期的那样工作:

TypeError: in method 'mymanager_add', argument 2 of type 'mymodule::mybase *'

我错过了什么?似乎不确定我的 Foo 类是“mybase”。我尝试在 Python 中添加对基类构造函数的调用,但这不起作用,说该类是抽象的。

def __init__(self):
    mymodule.mybase.__init__(self)
4

2 回答 2

2

我的猜测是,这Foo不是从mybaseC++ 环境中衍生出来的。我不确定 SWIG 是否可以实现这一点,因为它需要对继承的双向理解——Python 类使用 C++ 类作为基础,C++ 代码识别继承关系。我会认真研究 Boost.python,因为它似乎支持您所追求的功能。 这是 wiki.python.org 上关于它的条目。

于 2009-11-22T15:42:31.560 回答
0

不是一个真正的答案,但你可能对boost.python有更好的运气。不知道切换需要做多少工作,但您可能会得到一个简单的继承测试用例,让您的问题很快就解决了。

于 2009-11-22T13:49:04.083 回答