基于Boost.Python库的混合语言编程及其应用
python 解释 c++代码

一、介绍Python解释C++代码的概念在计算机编程领域中,Python和C++都是非常流行的编程语言。
Python是一种高级编程语言,它以简洁、易读和易学著称,常用于Web开发、数据分析和人工智能领域。
而C++是一种通用编程语言,以其高效、灵活和强大的特性而闻名,常用于系统开发、游戏开发和高性能计算领域。
在实际开发中,有时候我们希望能够在Python环境中直接调用和解释C++代码,这就需要用到Python解释C++代码的技术。
二、Python解释C++代码的方式Python解释C++代码的方式主要有两种:一种是使用Cython,另一种是使用Boost.Python。
以下将分别介绍这两种方式的基本原理和使用方法。
1. 使用CythonCython是一个Python的第三方库,它可以让我们编写C扩展模块来优化Python代码的性能。
我们可以将C++代码编译成Python扩展模块,然后在Python环境中引用和调用这些模块,实现Python解释C++代码的功能。
具体步骤如下:(1)编写C++代码我们需要编写C++代码,并将其保存为.cpp文件。
(2)编写Cython接口我们需要编写Cython接口文件,将C++代码封装成Python扩展模块。
(3)编译生成Python扩展模块我们使用Cython编译器将Cython接口文件编译成Python扩展模块,然后在Python环境中引用和调用这些模块。
2. 使用Boost.PythonBoost.Python是一个由Boost C++库提供的Python C++库,它可以让我们在Python环境中直接调用和解释C++代码。
使用Boost.Python的方式相对简单,只需包含相应的头文件、使用特定的宏定义和编写一些包装代码即可实现Python解释C++代码的功能。
具体步骤如下:(1)编写C++代码我们同样需要编写C++代码,并将其保存为.cpp文件。
(2)编写包装代码我们需要编写包装代码,使用Boost.Python的宏定义将C++代码封装成Python模块。
Boost库学习指南与使用说明

Boost库学习指南和说明文档作者:刘刚email:ganghust@个人主页:2007年11月17号Boost中文站Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。
Boost库由C++标准委员会库工作组成员发起,在C++社区中影响甚大,其成员已近2000人。
Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。
本站主要介绍Boost相关的中文技术文档。
Boost入门boost库简介Windows和Solaris上Boost安装和编译走进Boost(Boost使用入门)Boost编程技术C++Boost Thread线程编程指南Boost中文文档C++Boost Assign文档C++Boost Regex文档C++Boost Array文档Boost源码剖析Boost源码剖析之:型别分类器—type_traitsBoost源码剖析之:泛型指针类any之海纳百川Boost源码剖析之:增强的std::pair——Tuple TypesBoost库学习指南和说明文档 (1)Boost入门 (1)Boost编程技术 (1)Boost中文文档 (1)Boost源码剖析 (2)C++Boost学习资源列表 (3)C++Boost库简介 (3)Windows和Solaris上Boost安装和编译 (5)0前言 (5)1下载Boost+解包(略) (6)2编译jam (6)3设置环境变量 (6)4编译Boost (7)走进Boost[Boost使用入门] (8)0摘要 (8)1Boost简介 (9)2Boost下载和Boost安装 (9)3Boost组件lexical_cast (10)4小结 (14)5注释 (14)Boost中的智能指针 (15)Boost介绍 (15)智能指针 (16)智能指针的30秒介绍 (16)深入shared_ptr实现 (19)C++Boost Thread编程指南 (23)0前言 (24)1创建线程 (24)2互斥体 (26)3条件变量 (29)4线程局部存储 (33)5仅运行一次的例程 (35)6Boost线程库的未来 (36)7参考资料: (36)C++Boost库文档索引 (37)1按字母顺序库列表 (38)2按主题库列表 (40)C++Boost学习资源列表boost的老巢boost的中文站:CSDN--Boost系列专题/Subject/336/index.shtmLinux伊甸园论坛-STL/boost专区/forum/forumdisplay.php?f=37dozb的blog C++Boost库简介boost是一个准标准库,相当于STL的延续和扩充,它的设计理念和STL比较接近,都是利用泛型让复用达到最大化。
C “准”标准库BOOST简介

C++“准”标准库Boost简介标准C++的当前版本发布于1998,它为传统的面向过程编程、面向对象编程和泛型编程提供了坚实的支持。
正如旧C++(1998之前的)独力承担了把面向对象普及到日常的软件开发中一样,C++98在为泛型编程做着同样的事情。
九十年代中期标准模板库(STL)与标准C++的集成已经引起了另一次编程范式的转变,就象八十年代的时候Bjarne Stroustrup把类引入到C一样。
现在大多数的C++开发者都熟悉STL的概念,这再次提升了整体的水平。
C++能力的应用仍旧被不断发现。
今天许多的C++库,包括特殊的数学库,都大量利用了模板元编译的技术,它是设计C++模板的时候没有预测到的幸运结果。
随着C++社区里的高级工具和技术不断涌现,开发复杂应用软件正变得更简单、更令人愉快。
很难描述Boost对于C++世界的重要性。
自从C++98发布后,除了ISO的标准C++委员会,没有一个团体对于C++的发展方向有比Boost更大的影响(许多Boost的成员本身就是WG21的重要成员,包括它的创始人,我的朋友Beman Dawes)。
成千上万个杰出的Boost志愿者无私地,以对等审查方式开发了许多C++98没有提供的很有用的库。
这些库中的十个已被接受将加入到即将到来的C++0x的库中,更多的库正被考虑接受。
Where a library approach has been shown to be wanting,the wisdom gained from the cross-pollination of Boost and WG21 has suggested a few modest language enhancements,which are now being entertained.你不太可能没有听说过Boost,我来问一下你…你需要在文本和数字之间进行转换,或在任意的可流处理的类之间进行转换?没有问题,用Boost.lexical_cast。
boost的编译使用

boost的编译使用Boost是一个流行的C++库,它提供了许多功能强大的工具和组件,包括容器、算法、并发编程、图形学、网络编程等。
要使用Boost库,首先需要下载并安装Boost库,然后在编译和链接你的C++程序时包含相应的Boost头文件和链接Boost库文件。
下面我将从编译和使用Boost库的角度来详细介绍。
1. 下载和安装Boost库。
首先,你需要从Boost官方网站下载最新的Boost库源代码。
然后,解压缩文件并按照官方文档中的指导进行安装。
通常情况下,Boost提供了一个名为bootstrap.bat(Windows)或者bootstrap.sh(Linux)的脚本,你可以运行这个脚本来配置Boost 库。
接着,运行b2命令来编译Boost库。
2. 编译和链接Boost库。
一旦Boost库安装完成,你就可以在你的C++程序中使用它了。
在编译你的程序时,确保你的编译器能够找到Boost库的头文件。
你可以使用编译器的命令行选项或者在你的IDE中配置头文件搜索路径。
在链接你的程序时,确保你的编译器能够找到Boost库文件。
你需要指定Boost库文件的路径和库名字,具体的方法取决于你使用的编译器和操作系统。
3. 使用Boost库。
一旦你的程序成功编译和链接了Boost库,你就可以在你的代码中包含相应的Boost头文件,并使用Boost提供的功能和组件了。
比如,如果你想使用Boost的智能指针,你可以包含<boost/shared_ptr.hpp>头文件,并使用boost::shared_ptr类来管理动态分配的对象。
总之,要使用Boost库,你需要下载、安装Boost库,配置你的编译器,包含Boost头文件,链接Boost库文件,并在你的代码中使用Boost提供的功能和组件。
希望这些信息能够帮助你成功地编译和使用Boost库。
boost库的编译以及在CodeBlocks中的配置

Boost库的编译和在CodeBlocks的配置基本信息:时间:2012/11/2Boost库的版本:boost.1.51.0 release版CodeBlocks版本:编译前准备:如果是用gcc编译boost,首先一定要先安装MinGW或者安装带MinGW的CodeBlocks,并给gcc编译器置环境变量。
当然是可以使用VS编译boost库,使用vs新建一个工程编译boost库,可以参考:/boost.html本机使用的gcc的版本:步骤一,从boost的官方网站上下载最新的boost版本库,输入网址:如图所示,一般是官网上是都是最新的Release版和最新的Bata版,这里为了稳等的需求,一般是选择Release版的。
点击download进入下载的页面:这里可以根据网速的需求,下载不同的压缩格式,一般而言,不同的格式,因为压缩率的不同,解压缩的时间也不同。
步骤二.下载完成后,解压缩,解压的后的文件大概是400多MB。
解压后的文件的组织形式如下。
这里,新版的文件组织好像和以前的不同,双击图中的booststrap.bat 文件,此时会出现如下的窗口:这个窗口会出现几分钟,当它消失的会产生两个exe文件:单击并运行这两个文件中一个,一开始的时候,也不是很清楚两者有什么区别,但是后来发现,这俩个程序至少完成的功能是一样的。
运行bjam.exe时,此时,boost开始编译,大概是30-40分钟的样子(注意:不同电脑的时间是不同的,这是一因为编译的时候需要耗费大量的CPU资源和内存资源。
我的笔记本是i3 的处理器,2g 的内存),步骤三.由于是直接运行exe文件的,没看到最后的结果,可以自cmd命令行中,先进入当前的目录,输入cd D:\Users\xj\Downloads\boost_1_51_0\boost_1_51_0 再一次运行bjam.exe,可看到,如下的截图,说明编译成功。
注意,在编译中能会出现一些警告入文件找不到之类的,请忽略它。
boostpython用法

boostpython用法Boost.Python是一个将C++代码与Python编程语言无缝集成的库。
它可以帮助开发人员将现有的C++代码转化为可在Python中使用的扩展模块。
以下是Boost.Python的常见用法:1. 定义Python模块:在C++代码中使用Boost.Python库提供的宏和函数来定义Python模块。
这可以通过宏BOOST_PYTHON_MODULE()来实现。
例如:```cpp#include <boost/python.hpp>namespace py = boost::python;// 定义一个简单的Python模块BOOST_PYTHON_MODULE(example){py::def("add", &add); // 导出一个函数}int add(int a, int b){return a + b;}```2. 编译生成Python扩展模块:使用适当的编译器和构建系统将C++代码编译为动态链接库或共享库。
这有赖于所用的平台和构建工具。
3. 在Python中使用扩展模块:在Python中导入和使用生成的扩展模块。
导入模块后,就可以像使用任何其他Python模块一样使用其中定义的C++函数和类。
例如:```pythonimport exampleresult = example.add(3, 5)print(result) # 输出 8```4. 导出C++类到Python:Boost.Python还可以帮助开发人员将C++类导出为Python类。
这可以通过定义适当的包装器和使用Boost.Python库提供的宏来实现。
例如:```cppclass MyClass{public:int add(int a, int b){return a + b;}};BOOST_PYTHON_MODULE(example){py::class_<MyClass>("MyClass").def("add", &MyClass::add);}``````pythonimport exampleobj = example.MyClass()result = obj.add(3, 5)print(result) # 输出 8```这只是Boost.Python的一些基本用法。
boost的用法和搭配
boost的用法和搭配
在C++中,Boost是一个非常流行的开源库,它提供了许多强大的、高效的工具和组件,可以帮助程序员更轻松地编写高质量的代码。
下面是Boost常用的用法和搭配:
1. 智能指针
Boost提供了多种类型的智能指针,如shared_ptr、scoped_ptr 和weak_ptr等。
这些指针可以帮助程序员更好地管理内存,避免内
存泄漏和野指针等问题。
2. 字符串处理
Boost还提供了许多用于字符串处理的组件,如regex、
token_iterator和lexical_cast等。
这些组件可以帮助程序员更方便地进行字符串匹配、分割、转换等操作。
3. 容器和算法
Boost提供了许多高效的容器和算法,如multi_index、
circular_buffer和graph等。
这些容器和算法可以帮助程序员更快地完成数据结构和算法相关的任务。
4. 时间和日期处理
Boost还提供了一些用于时间和日期处理的组件,如posix_time、gregorian和date_time等。
这些组件可以帮助程序员更方便地进行日期格式化、时间计算等操作。
5. 多线程和并发编程
Boost还提供了一些用于多线程和并发编程的组件,如thread、
mutex和condition_variable等。
这些组件可以帮助程序员更好地控制并发访问和线程同步等问题。
总之,Boost是一个非常强大的开源库,它提供了许多有用的工具和组件,可以帮助程序员更轻松地编写高质量的代码。
程序员可以根据自己的需要选择适合自己的组件和使用方法。
boost.python用法
boost.python用法Boost.Python(简称"bpl")是一个跨语言的库,用于将C++代码与Python 代码进行互操作。
它允许Python开发人员使用C++库,或者用C++编写Python扩展模块。
Boost.Python的用法如下:1. 准备环境:- 安装Python,确保已经正确配置Python环境变量。
- 下载Boost库,并通过编译器将其安装到系统中。
2. 使用Boost.Python库:- 在C++代码中包含<boost/python.hpp>头文件。
- 定义需要与Python交互的C++类和函数。
- 使用BOOST_PYTHON_MODULE宏定义一个导出模块,将C++类和函数导出到Python环境中。
cpp#include <boost/python.hpp>void sayHello() {std::cout << "Hello, world!" << std::endl;}BOOST_PYTHON_MODULE(example) {boost::python::def("say_hello", sayHello);}3. 编译链接:- 将定义的C++代码编译为共享库文件。
- 链接Boost.Python库和Python库。
g++ -shared -o example.so example.cpp -lboost_python-lpythonX.X- `example.so`是编译生成的共享库文件,其中`X.X`是你所使用的Python 版本的主要版本号。
4. 在Python中使用Boost.Python模块:- 将生成的共享库文件加载到Python中。
- 调用导出的C++函数或类。
pythonimport exampleexample.say_hello()以上是Boost.Python库的基本使用方法。
boost常用库的使用介绍第一讲
boost常用库的使用介绍第一讲[object Object]Boost是一个C++库集合,包含了许多常用的工具和组件,用于增强C++的功能和性能。
Boost库广泛应用于各种领域,如网络编程、多线程、数据结构、算法等。
Boost库的使用可以大大简化C++开发过程,提高开发效率。
下面是一些常用的Boost库和它们的使用介绍:1. Boost.Filesystem:用于处理文件和目录的库。
它提供了一组易于使用和跨平台的API,可以进行文件和目录的创建、删除、移动、复制等操作。
2. Boost.Regex:正则表达式库,提供了强大的正则表达式功能,可以进行字符串匹配、替换等操作。
Boost.Regex支持多种正则表达式语法,包括Perl、ECMAScript等。
3. Boost.Thread:多线程库,提供了线程的创建、同步、互斥等功能。
Boost.Thread可以简化多线程编程,提高程序的并发性能。
4. Boost.Asio:网络编程库,提供了异步网络编程的功能。
它支持TCP、UDP、SSL等协议,可以用于开发高性能的网络应用程序。
5. Boost.SmartPtr:智能指针库,提供了shared_ptr、weak_ptr等智能指针类,用于管理动态分配的内存。
使用智能指针可以避免内存泄漏和悬挂指针等问题。
6. Boost.Algorithm:算法库,提供了一系列常用的算法,如排序、查找、字符串处理等。
Boost.Algorithm可以方便地进行各种数据处理操作。
7. Boost.Date_Time:日期和时间库,提供了日期和时间的表示、计算和格式化等功能。
它支持多种日期和时间表示方式,如Gregorian、Julian等。
8. Boost.Serialization:序列化库,用于将对象转换成字节流或从字节流中恢复对象。
Boost.Serialization可以方便地进行对象的序列化和反序列化操作。
python与C++混合编程
一、环境搭建1.安装python2.6(python3.xx版本编译失败,未找到原因)。
2.配置vs2008项目(python自带的python26.dll为release版本,所以vs2008项目也必须调整为release,但是通过设置也可以对release进行调试,如果需要debug版本可以从网上下载已有的python26_d.dll和python26_d.lib,也可以下载python源码自己编译。
)①C/C++ ----> 常规---> 附件库包含目录,加入python头文件目录,如下图:②连接器---> 常规--->附件库目录。
加入python库文件目录,如下图:③连接器---> 输入---> 附加依赖项。
加入python库文件名,如下图:二、代码实现1.C++调用python①高层次嵌入python(所谓的高层次嵌入主要是指程序与脚本间没有交互)#include <Python.h>{Py_Initialize(); /* Python解释器初始化*/PyRun_SimpleString("print 'hi,python!'"); /* 运行python字符串*/Py_Finalize(); /* 结束Python解释器,释放资源*/return 0;}②低层次嵌入pyton,可以交互。
但是只限python的基本类型数据(整型、浮点型、字符串、元组、列表和字典)。
C++代码:#include <stdio.h>#include <Python.h>int main(int argc, char* argv[]){PyObject *modulename, *module, *dic, *func, *args, *rel, *list;char *funcname1 = "sum";int i;Py_ssize_t s;printf("-==在C中嵌入Python==-\n");/* Python解释器的初始化*/Py_Initialize();if(!Py_IsInitialized()){printf("初始化失败!");return -1;}/* 导入Python模块,并检验是否正确导入*/modulename = Py_BuildValue("s", "pytest");/*pytest参数,为python脚本,此处的意思是导入当前路径下名称为pytest.py的python脚本文件*/module = PyImport_Import(modulename);if(!module){printf("导入pytest失败!");return -1;}/* 获得模块中函数并检验其有效性*/dic = PyModule_GetDict(module);if(!dic){printf("错误!\n");return -1;}/* 获得sum函数地址并验证*/func = PyDict_GetItemString(dic,funcname1);if(!PyCallable_Check(func)){printf("不能找到函数%s",funcname1);return -1;}/* 构建列表*/list = PyList_New(5);printf("使用Python中的sum函数求解下列数之和\n");for (i = 0; i < 5; i++){printf("%d\t",i);PyList_SetItem(list,i,Py_BuildValue("i",i));}printf("\n");/* 构建sum函数的参数元组*/args = PyTuple_New(1);PyTuple_SetItem(args,0,list);/* 调用sum函数*/PyObject_CallObject(func,args);/* 释放资源*/Py_DECREF(list);Py_DECREF(args);Py_DECREF(module);/* 结束Python解释器*/Py_Finalize();printf("按回车键退出程序:\n");getchar();return 0;}Python代码,pytest.py文件内容。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目前有多个工具可以实现跟 Boost.Python 类似的功能,如 SWIG[4],SIP 等。但是它们 有很大的不同。SWIG 和 SIP 都定义了一种接口描述语言。需要先写一个接口描述文件, 用于描述我要导出的 C++ 函数和类。然后通过一个翻译器,将接口描述文件翻译成 C++ 程序。 最后编译连接生成的 C++ 程序来生成扩展库。 而 Boost.Python 用于导出 C++ 函数 和类的时候,我需要添加的也是 C++ 的代码,这是 Boost.Python 的最大特点之一。 Boost.Python 的另外一个优点是,它的设计目标就是让 C++ 程序库可以透明地导出到 Python 中去。即在完全不修改原来 C++ 程序的情况下,导出给 Python 用。在这种设计理 念下设计出来的 Boost.Python 比同类工具支持了给完善的 C++ 特性,能够最大程度地保 证不修改原 C++ 程序。
-3-
…… MenuInterface = MenuInterfaceType();
4.2 编写菜单脚本 menu.py,供主程序调用
通过暴露的C++ API接口函数来编写脚本,以下是该文件部分实现: def BuildUnitMenu(UnitMenu, UnitInfo): UnitMenu.AddItem('设置速度','') UnitMenu.BeginSubMenu() UnitMenu.AddItem('30% [1]','Speed30') UnitMenu.AddItem('经济 [2]','Speed50') …… UnitMenu.EndSubMenu()
1.引言
混合语言编程是指采用两种或两种以上的编程语言来进行程序开发的方法, 一种常见情 况是系统编程语言(例如 C,C++)和脚本语言(如 python,lua)之间的混合。混合语言编程的 软件开发方法近年来日益受到重视[1]。采用此方法的好处可以充分利用不同编程语言的各自 优势。系统编程语言开发的程序运行速度快,但开发周期较长;脚本语言方便灵活,代码简短, 开发效率可提高 5-10 倍,但程序运行速度慢。合理地结合两者的优点,取长补短,可以快速 高效地构建应用程序并维持相当的性能。 Python[2]是最近日益流行的一种脚本语言,它所具有的多种特性使其非常适用于混合语 言编程。Boost.Python[3]是一个开源的 C++程序库,提供类似 IDL 的接口来把 C++类和函数 绑定到 Python。借助于 C++ 强大的编译时内省能力和最新的元编程技术,它完全用 C++来 实现,而不用引入新的语法。Boost.Python 丰富的特性和高级接口使从底层起按混合系统的 方式设计组件成为可能, 从而使程序员可以轻松和连贯的同时使用 C++高效的编译时多态和 Python 极其方便的运行时多态。
[5]
为 Boost.Python 定义, 可以执行一段 Python 脚本, 完成将程序信息输出到指定文件的操作。
4.应用举例
在笔者开发的模拟系统中,通过对Boost.Python的使用,将系统菜单的显示与主应用程 序脱离开,完全的交给外部的python脚本文件控制的。通过这种方法用户不仅可以根据需要 灵活的配置界面,而且可以根据主系统提供的API接口,自由的定义菜单与API的响应关系。 给系统带来高度的灵活性。下面具体讲解具体的实现方法。
4.3 主程序导入菜单脚本 menu.py
主程序通过Boost.Python提供的方法可直接运行构建菜单的脚本menu.py: void BuildPlatformMenu() { handle<>( PyRun_String("Menu.BuildUnitMenu(UserMenu, HookedUnitInfo)" , Py_file_input, main_namespace.ptr(), main_namespace.ptr()) ); }
-1-
便地根据需求的变化改写脚本代码,而不是必须重新编译链接二进制的动态链接库; Boost.Python 为 C++程序提供的封装能力,是基于 template 机制的。我们要做的,是把 C++程序中的函数、类、数据成员等等,都变成 Python 对象。Boost.Python 封装了各平台的 Python 动态链接库接口,我们要做的只是调用它,封装需要暴露的定义,然后指示编译器 生成动态链接库即可。 3.1.1 暴露 c++函数给 Python 函数封装 Python 的 API 使用回调函数调用 Python 对象和函数。BOOST 提供完整的函 数封装过程,一个简单的封装过程如下 : //需要封装的 C++函数 char const* greet() { return "hello, world"; } //通过 Boost.Python 的封装将函数暴露给 python 调用 #include <boost/python.hpp> using namespace boost::python; // 使用 BOOST_PYTHON_MODULE 命名模块名为“hello” BOOST_PYTHON_MODULE(hello) { def("greet", greet); } 将 c++工程文件编译成动态链接库文件,然后就可以在 python 解释器中使用该模块。 3.1.2 暴露 c++的类给 Python Python 虚拟机提供引用计数和自动垃圾回收能力, 但是 C++对象没有这样的能力 (C++ 对象运行在 Python 虚拟机之外) 。为了避免程序运行过程中的内存使用问题,需要为函数中 传递的指针提供引用计数管理,Boost 通过“调用协议”来支持此功能,详情请见 BOOST 文 档"Call Policies"。 C++对象到 Python 对象的封装 BOOST 文档中提供了 C++对象封装至 Python 对象的方法,主要手段是以 class_模板将 C++类定义解析为符合 C API 的形式,一个 形如 : class World { void set(std::string msg) { this->msg = msg; } std::string greet() { return msg; } std::string msg; }; 的 C++代码可以通过如下方式封装: #include <boost/python.hpp> using namespace boost::python; BOOST_PYTHON_MODULE(hello) { class_<World>("World") .def("greet", &World::greet)
图1 显示效果截图
5. 结语
随着计算机编程语言的发展,混合语言编程已成为一种流行的软件开发方法,Python 的特点使其非常适合于混合语言编程的软件开发。通过Python扩展或者嵌入,程序员可以充 分利用脚本语言和系统编程语言两者的优点, 达到提高开发效率, 增强程序的灵活性和交互 性的目的。
-4-
基于 Boost.Python 库的混合语言编程及其应用
徐凌,尹勇
武汉理工大学信息学院,湖北武汉(430070)
E-mail:xllinux@
摘 要:Boost.Python 是著名的 c++库 Boost 的一个组件,它实现了 c++和 python 两种功能 丰富的优秀的语言环境间的无缝协作。本文介绍了 Boost.Python 库的特点和使用方法,并通 过实例,说明了在制作用户界面时使用脚本语言的具体方法。 关键词:Boost;Python;C++;脚本语言;混合语言编程 中图分类号:TP393
-2[3] [3]
.def("set", &World::set) ; } 这里,构造类型 class_<World>的未命名对象,把"World"传给它的构造器。这将在扩展 模块里创建一个叫 World 的新的 Python 类,并把它和 C++类型 World 在 Boost.Python 的类 型转换注册表里关联起来。 这里的关键点在于封装代码必有的 BOOST_PYTHON_MODULE 宏和 class<>模板的 def。为了支持 C++类定义丰富的内容,Boost.Python 提供了很多调用方法,比较常用,也比 较重要的是构造函数、重载和虚函数的支持。详细情况请参考 Boost 文档。
4.1 封装 c++函数,供 python 脚本调用
类MenuInterface实现了一套用于操作菜单C++ API函数: class MenuInterface { public: //增加菜单项 void AddItem(std::string caption, std::string command); …… private: static Menu* mpMenu; }; 然后,将MenuInterface类通过Boost.Python中的函数暴露给python使用: MenuInterfaceType = class_<tcMenuInterface>("MenuInterfaceClass") .def("AddItem", &tcMenuInterface::AddItem)