我正在将用C ++编写的Python扩展模块从Boost.Python移植到SWIG。
C ++代码使用静态工厂方法
定义抽象类X
class X {
public:
static X* create(const char* descr);
...
};
factory方法返回指向某个派生类的实例的指针。
使用Boost.Python,您可以将C ++类X
包装在具有
X
中
__init__(self, descr)
调用X::create
的方法。事实上,它完成如下:
namespace bp = boost::python;
bp::class_<X>("X", boost::no_init)
.def("__init__", bp::make_constructor(&X::create))
...
有没有办法用SWIG做同样的事情?
答案 0 :(得分:1)
根据建议,最好使用__new__
来控制类的创建方式。在SWIG中,您应该创建一个如下所示的接口(.i)文件:
%extend X {
static X * __new__(const char *desc) { return create(desc); }
};