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