boost.python 初级教程

python便于快速开发,并且python底层是c,与c的兼容性非常好,用python快速开发,用c++开发性能要求较高的模块是一个非常理想的选择。

python自带一个ctypes,使用非常方便,但是不支持c++的类,swig使用又比较繁锁,幸好还有boost.python,使用非常方便,并且可以导出类!


boost.python的安装:

我的环境是win7 x64 + vs2010

windows下有简单的办法,直接安装,速度第一位,暂时不需要,我就不再研究如何编译了。

直接在下载页找到installer,http://www.boost.org/doc/libs/1_51_0/more/getting_started/windows.html

让它去安装就可以了,这个是在线,需要一定时间,看你网速了。

安装好后,在项目的vc++目录,给包含目录和库目录添加上python和boost的目录

python 的是$(PYTHONPATH)\include和$(PYTHONPATH)\libs

boost 的目录是  安装目录\boost  和安装目录\lib


附上官方翻译过来的hello例子:

Hello.cpp
char const* greet()
{
   return "hello, world";
}

#include <boost/python.hpp>

BOOST_PYTHON_MODULE(hello_text)
{
    using namespace boost::python;
    def("greet", greet);
}
注:用boost.python包装的这一段可以不和c++函数写一个文件里,也就是说,假如hello已经包装成一个lib,可以在外边写接口,非常方便!
 
 

编译时,属性->配置属性->常规->项目默认值->配置类型 选择dll

编译好后,把生成的dll文件改名为hello.pyd

最后在python中调用即可,和直接使用python模块没有区别。

>>> import hello_ext
>>> print hello_ext.greet()
hello, world


今天学习了最基本的boost.python功能,明天继续学习。

注:boost.python 和 ctypes不一样,ctypes针对的c,所以支持c几乎所有的功能,包括非常重要的指针。而boost.python针对的是c++的类,我在google上没有找到它支持char* , int* 等指针传递的方法(返回值可以支持char*,但char*做参数不可以),可能boost.python封装c++时,已经将c++的c那部分内容选择性屏蔽了,但是boost.python提供了对c++的vector,list , map等的转换方法,不失为曲线救国的方法。

附上官方教程:http://www.boost.org/doc/libs/1_51_0/libs/python/doc/tutorial/doc/html/index.html



你可能感兴趣的:(C++,python,Module,dll,include,installer)