繁体   English   中英

如何使用SWIG将C ++工厂方法包装在Python __init__函数中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM