Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python是如何工作的? 如何在Python调用C++对象时调用C++对象,并已构建了W/A C编译器?< P> C++可以通过外部“C”声明与C进行互操作。 < P> Boost.Python有特殊的宏,声明函数有“代码>外”“C”< /代码>,这样Python解释器就可以调用它们。这有点复杂,但您可以查看以了解更多信息。_C++_Python_Boost Python - Fatal编程技术网

Python是如何工作的? 如何在Python调用C++对象时调用C++对象,并已构建了W/A C编译器?< P> C++可以通过外部“C”声明与C进行互操作。 < P> Boost.Python有特殊的宏,声明函数有“代码>外”“C”< /代码>,这样Python解释器就可以调用它们。这有点复杂,但您可以查看以了解更多信息。

Python是如何工作的? 如何在Python调用C++对象时调用C++对象,并已构建了W/A C编译器?< P> C++可以通过外部“C”声明与C进行互操作。 < P> Boost.Python有特殊的宏,声明函数有“代码>外”“C”< /代码>,这样Python解释器就可以调用它们。这有点复杂,但您可以查看以了解更多信息。,c++,python,boost-python,C++,Python,Boost Python,Python声明了一个C-API(请参阅或)。这个API定义了一个名为PyObject的通用对象类型,它只是一个普通的C结构。这个结构定义了(几乎)python对象可以做的所有事情,例如,当对这个对象进行添加或比较,或者像函数一样简单地调用它时会发生什么 因为python类型也是对象(因此在C中由PyObject结构表示),所以定义一个新类型只需定义一个新的PyObject结构即可。在Python中调用方法时,解释器将调用转发给与此结构关联的C函数 只要给定的(已编译的)扩展提供了正确的入口点,

Python声明了一个C-API(请参阅或)。这个API定义了一个名为
PyObject
的通用对象类型,它只是一个普通的C结构。这个结构定义了(几乎)python对象可以做的所有事情,例如,当对这个对象进行添加或比较,或者像函数一样简单地调用它时会发生什么

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

只要给定的(已编译的)扩展提供了正确的入口点,Python解释器就可以对其进行内省并找出可用的内容(我上面提到的文档确实详细解释了这一点),然后它就可以像提示时通常可用的任何其他对象一样使用这些对象-顺便说一句,使用完全相同的C-API构建。只需导入编译后的扩展名即可

我希望Python解释器如何从上面的已编译扩展中调用东西有点清楚。唯一的缺失是C-API如何调用C++代码。p> Python通过在代码中声明C入口点来实现这一点,如下所述:。每次调用时,例如,
boost::python::class
,它都会对您向python声明的类型执行此操作,因此创建一个表示您的类的
PyObject
,并使用您选择的名称。在这个类上调用
.def
时,您将填充该结构的内部插槽,声明新类型的更多方法、运算符和属性。这些内部槽中的每一个指向C样式函数,它只不过是等效C++调用的包装器。