首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Boost.Python是如何工作的?

Boost.Python是如何工作的?
EN

Stack Overflow用户
提问于 2010-09-15 03:16:19
回答 3查看 1.5K关注 0票数 8

如果解释器是C语言,并且是用C编译器构建的,Python如何能够调用C++对象?

EN

回答 3

Stack Overflow用户

发布于 2010-09-15 03:34:29

Python有特殊的宏用extern "C"声明函数,因此Boost.Python解释器将能够调用它们。这有点复杂,但你可以查看Boost documentation了解更多信息。

票数 7
EN

Stack Overflow用户

发布于 2013-07-04 02:30:10

Python声明了一个C-API (参见http://docs.python.org/2/c-api/http://docs.python.org/3/c-api/)。这个API定义了一个名为PyObject的泛型对象类型,它只是一个普通的C结构。这种结构定义了(几乎) python对象可以做的所有事情,例如,当对该对象进行加法或比较或简单地像调用函数一样调用它时会发生什么。

因为python类型也是对象(因此在C中由PyObject结构表示),所以定义一个新类型很简单,只需定义一个类似的新PyObject结构即可。在Python中调用方法时,解释器将调用转发给与此结构关联的C函数。

只要给定的(编译的)扩展提供了正确的入口点,这样Python解释器就可以内省它并找出可用的东西(我上面提到的文档详细解释了这一点),然后它就可以像通常在提示符处提供的任何其他对象一样使用这些对象-这些BTW都是使用完全相同的C-API构造的。对编译后的扩展执行import就足够了。

我希望大家都清楚Python解释器是如何从上面编译的扩展中调用东西的。唯一缺少的差距是C-API调用C++代码的方式。

Boost.Python通过在代码中声明C入口点来实现这一点,如下所示:Elegantly call C++ from C。每次你调用boost::python::class_时,它都会为你声明给python的类型做这件事,因此用你选择的名字创建一个代表你的类的PyObject。当你在这个类上调用.def时,你可以填充这个结构的内部槽,声明更多的新类型的方法、运算符和属性。这些内部槽中的每一个都指向一个C风格的函数,该函数只不过是等效C++调用的包装器。

票数 6
EN

Stack Overflow用户

发布于 2010-09-15 03:33:30

C++可以通过外部"C“声明与C进行互操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3712125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档