ere*_*eOn 6 c++ python boost-python
我最近发现了boost-python的存在,并且很惊讶它的简单性.我想尝试一下并开始包装现有的C++库.
虽然包装基本库API调用非常简单(没有什么特别的,只是常规函数调用和非常常见的参数),但我不知道如何正确包装初始化/清理函数:
就目前而言,我的C++库要求调用者mylib::initialize()在程序启动时首先调用,并mylib::cleanup()在它结束之前调用(实际上还有一个初始化器对象来处理它,但它可能是无关紧要的).
我应该如何使用boost python包装它?
强制Python用户调用mymodule.initialize(),mymodule.cleanup()似乎不是非常pythonic.有没有办法以自动方式?理想情况下,调用initialize()将在导入模块时透明地完成,并且调用cleanup()也在python脚本结束时完成.
有没有办法做到这一点?如果没有,最优雅的解决方案是什么?
谢谢.
您可以尝试执行保护对象并将其分配给模块的隐藏属性.
struct MyLibGuard
{
MyLibGuard() { myLib::initialize();}
~MyLibGuard() { myLib::cleanup();}
};
using namespace boost::python;
BOOST_PYTHON_MODULE(arch_lib)
{
boost::shared_ptr<MyLibGuard> libGuard = new MyLibGuard();
class_<MyLibGuard, boost::shared_ptr<MyLibGuard>, boost::noncopyable>("MyLibGuard", no_init);
scope().attr("__libguard") = libGuard;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1069 次 |
| 最近记录: |