我正在将一个用C++编写的Python扩展模块从Boost.Python移植到SWIG。
C++代码定义了一个带有静态工厂方法的抽象类X
class X {
public:
static X* create(const char* descr);
...
};
工厂方法返回指向某个派生类的实例的指针。
使用Boost.Python,您可以将C++类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做同样的事情?
发布于 2012-03-29 12:21:59
正如所建议的,最好使用__new__
来控制类的创建方式。在SWIG中,您应该创建如下所示的界面(.i)文件:
%extend X {
static X * __new__(const char *desc) { return create(desc); }
};
https://stackoverflow.com/questions/9790721
复制