boost::python的使用
2015-03-13 14:52
127 查看
boost::python库是pyhon和c++相互交互的框架,可以再python中调用c++的类和方法,也可以让c++调用python的类和方法
python自身提供了一个Python/C API用来实现python和c++的交互,boost::python是Python/C API的包装,所以用起来更简单一些。
Python对一个动态类型的语言,C++是一个静态类型的语言,对于Python中的变量类型,Boost.Python都有相应的类对应,他们都是boost::python::object的子类。boost::python::object 包装了PyObject *, 通过这种方式c++可以平滑的操作python对象。Boost.Python的主要目标既保持Python的编程风格同时又提供C++和Python的双向映射。
python代码:
c++重写代码
Python::Object是一个抽象父类,对Python的每个类型都实现了一个对应的子类。
list
dict
tuple
str
long_
enum
Python::Object对应一个Python对象,那么c++怎么获取Python对象的值呢,这个需要使用Python::extract方法
通过PyObject*构造一个boost::python::object对象。
这样情况下. o管理pyobj, 不会增加pyobj的引用计数。
这中情况下,会调用
怎么从python::object对象中获取PyObject* :
python自身提供了一个Python/C API用来实现python和c++的交互,boost::python是Python/C API的包装,所以用起来更简单一些。
Python对一个动态类型的语言,C++是一个静态类型的语言,对于Python中的变量类型,Boost.Python都有相应的类对应,他们都是boost::python::object的子类。boost::python::object 包装了PyObject *, 通过这种方式c++可以平滑的操作python对象。Boost.Python的主要目标既保持Python的编程风格同时又提供C++和Python的双向映射。
python代码:
def f(x, y): if(y =='foo'): x[3:7]='bar' else: x.items += y(3, x) return x def getfunc(): return f;
c++重写代码
object f(object x, object y){ if(y =="foo") x.slice(3,7)="bar"; else x.attr("items")+= y(3, x); return x; } object getfunc(){ return object(f); }
Python::Object是一个抽象父类,对Python的每个类型都实现了一个对应的子类。
list
dict
tuple
str
long_
enum
Python::Object对应一个Python对象,那么c++怎么获取Python对象的值呢,这个需要使用Python::extract方法
double d=python::extract<double>(obj)
通过PyObject*构造一个boost::python::object对象。
boost::python::object o(boost::python::handle<>(pyobj));
这样情况下. o管理pyobj, 不会增加pyobj的引用计数。
boost::python::object o(boost::python::handle<>(boost::python::borrowed(pyobj)));
这中情况下,会调用
Py_INCREF ,当O对象生命周期结束 ,pyobj不会析析构掉
怎么从python::object对象中获取PyObject* :
obj.ptr()
相关文章推荐
- suse 11下编译使用boost-python报错:error: changes meaning of 'keywords' from 'struct boost::python::detail::keywords'
- 使用 Boost.Python 嵌入 Python 模块到 C++
- boost.python vector_indexing_suite 使用注意事项
- 使用boost.python进行混合开发
- Boost.python 编译和使用
- 让主程序可以通过python脚本扩展功能及boost.python的使用
- [转]在OS X 中安装boost.python, 使用homebrew
- 使用boost.python静态库
- boost python的使用
- 使用Boost.Python开发
- Boost.Python使用小结
- 使用Boost.Python
- boost.python的安装配置和初次使用
- boost python 使用
- Boost Python 包装C++函数供Python使用时返回值为引用类型的解决方案
- 使用boostpython小结
- c++ python交互之boost.python 简集之Vector(map)混合使用
- 使用 Boost.Python 嵌入 Python 模块到 C++
- 使用boost::python的链接出错
- XGBoost:在Python中使用XGBoost