![](/img/trans.png)
[英]How to wrap a c++ function which takes in a function pointer in python using SWIG
[英]How to wrap a C++ factory method in a Python __init__ function using SWIG
我正在将用C ++编写的Python扩展模块从Boost.Python移植到SWIG。
C ++代码使用静态工厂方法定义了抽象类X
class X {
public:
static X* create(const char* descr);
...
};
factory方法返回一个指向某些派生类的实例的指针。
随着Boost.Python的你可以用C ++类X
在Python类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做同样的事情?
如建议的那样,最好使用__new__
来控制如何创建类。 在SWIG中,您应该创建一个如下所示的接口(.i)文件:
%extend X {
static X * __new__(const char *desc) { return create(desc); }
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.