如何使用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);
...
};
工厂方法返回指向某个派生类实例的指针。
使用Boost.Python,您可以将C++类X
封装在具有的Python类X
中
__init__(self, descr)
方法调用CCD_ 4。事实上,它是这样做的:
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); }
};
相关文章:
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- Pybind11:将元组列表从Python传递到C++
- 如何在c++中使用引用实现类似python的行为
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 递归列出所有目录中的C++与Python与Ruby的性能
- IPC使用多个管道和分支进程来运行Python程序
- 从python中调用C++函数并获取返回值
- Python 3.7 和 excess_args 的 SWIG 问题
- GCC对可能有效的代码抛出init list生存期警告
- Python中的for循环与C++有何不同
- 使用Pybind11向Python公开Eigen::张量
- Python str to C++ to Python str
- 如何使用Python从C++中读取谷物序列化数据
- 如何在C++中使用pybind11加载一个pickle python列表
- 如何在c++中使用system()来运行包含空格的python脚本
- python集合的C++等价物是什么.计数器
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 从python调用openMP共享库时,未定义opnMP函数
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- 我在哪里定义代码来释放在C Python模块init函数中分配的资源