Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.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
出口C++;Python的类 我有C++编写的程序(现在是静态库),它使用非常抽象的接口,在类中使用运算符重载。我想从它中创建一个共享库(Windows上的DLL将是第一步,在尝试其他平台之前)将其用于其他更“用户友好”的语言。我读到Python的ctypes对此有一定程度的支持 我想知道,如果在Python中使用C++高级DLL来选择正确的选项,在投入时间去做某事之前,这是不可能的。用户应该能够初始化我的程序提供的类,并将它们与包括重载运算符在内的所有方法一起使用(当然,只有那些在python中可用的方法)。或者Python只是为了支持一些简单的函数调用等 > C++代码(甚至只是用户可访问的类)是巨大的,我希望避免创建单独的Python包装,因为所有需要的功能已经在C++中完成了。 < P>因为没有人回答,我将同时提供我收集的所有东西。希望对一些人有所帮助_Python_C++_Dll_Dllexport - Fatal编程技术网

出口C++;Python的类 我有C++编写的程序(现在是静态库),它使用非常抽象的接口,在类中使用运算符重载。我想从它中创建一个共享库(Windows上的DLL将是第一步,在尝试其他平台之前)将其用于其他更“用户友好”的语言。我读到Python的ctypes对此有一定程度的支持 我想知道,如果在Python中使用C++高级DLL来选择正确的选项,在投入时间去做某事之前,这是不可能的。用户应该能够初始化我的程序提供的类,并将它们与包括重载运算符在内的所有方法一起使用(当然,只有那些在python中可用的方法)。或者Python只是为了支持一些简单的函数调用等 > C++代码(甚至只是用户可访问的类)是巨大的,我希望避免创建单独的Python包装,因为所有需要的功能已经在C++中完成了。 < P>因为没有人回答,我将同时提供我收集的所有东西。希望对一些人有所帮助

出口C++;Python的类 我有C++编写的程序(现在是静态库),它使用非常抽象的接口,在类中使用运算符重载。我想从它中创建一个共享库(Windows上的DLL将是第一步,在尝试其他平台之前)将其用于其他更“用户友好”的语言。我读到Python的ctypes对此有一定程度的支持 我想知道,如果在Python中使用C++高级DLL来选择正确的选项,在投入时间去做某事之前,这是不可能的。用户应该能够初始化我的程序提供的类,并将它们与包括重载运算符在内的所有方法一起使用(当然,只有那些在python中可用的方法)。或者Python只是为了支持一些简单的函数调用等 > C++代码(甚至只是用户可访问的类)是巨大的,我希望避免创建单独的Python包装,因为所有需要的功能已经在C++中完成了。 < P>因为没有人回答,我将同时提供我收集的所有东西。希望对一些人有所帮助,python,c++,dll,dllexport,Python,C++,Dll,Dllexport,Python的ctypes只支持C语言特性。因此,无法使用CyType直接从Python访问类和其他C++对象。但是,有一些方法可以访问它们 乏味的方法 为C++类创建C样式对象,然后为它们创建Python包装。< /P> C样式对象基本上是指向动态分配的C++对象的指针。它应该有额外的方法,例如传统命名的->Release(),以销毁对象并释放分配的内存。然后,您需要手动创建Python包装,它将类似于原始C++对象,包括重载操作符等(StutoOut:我遇到的唯一操作符,在这种情况下可能需

Python的ctypes只支持C语言特性。因此,无法使用CyType直接从Python访问类和其他C++对象。但是,有一些方法可以访问它们

乏味的方法

为C++类创建C样式对象,然后为它们创建Python包装。< /P>

C样式对象基本上是指向动态分配的C++对象的指针。它应该有额外的方法,例如传统命名的

->Release()
,以销毁对象并释放分配的内存。然后,您需要手动创建Python包装,它将类似于原始C++对象,包括重载操作符等(StutoOut:我遇到的唯一操作符,在这种情况下可能需要,并且在Python中不可重载为赋值操作符)。 当您希望完全控制正在发生的事情并且不介意在Python中复制接口时,这可能是最好的解决方案

快速法 Boost提供了一个Boost::Python库来处理这个问题。它可以让你导出任何你需要的东西——类,操作符,甚至多个重载方法

唯一的问题是,这个库非常大,而且它是一个非页眉Boost库,因此您需要了解如何使用您的项目构建它,这对于从未使用过Boost的人(比如我)来说可能并不容易

我不知道这个库到底做什么,也许它只是自动化了前面方法中描述的相同的东西。所以我不确定它是减少了额外包装的数量,还是只是简单地为你做了所有艰苦的包装工作,但它做了我需要做的事情

更快的方法 幸运的是,我遇到了另一个选择——pybind11。它是一个相对较小的库,与Boost::Python做相同的事情,并且它只是头文件。它有很好的文档,并且易于使用。它被称为pybind11,因为它最初是用来支持C++11的,但目前它支持C++14和实验性的C++17,但我在C++17项目中使用了它,到目前为止没有发现任何问题


我还不确定哪种方法最适合我的项目,但现在,我使用pybind11,只是为了在项目开发过程中使它更容易。

由于没有人回答,我将提供我自己收集的所有信息。希望对一些人有所帮助

Python的ctypes只支持C语言特性。因此,无法使用CyType直接从Python访问类和其他C++对象。但是,有一些方法可以访问它们

乏味的方法

为C++类创建C样式对象,然后为它们创建Python包装。< /P>

C样式对象基本上是指向动态分配的C++对象的指针。它应该有额外的方法,例如传统命名的

->Release()
,以销毁对象并释放分配的内存。然后,您需要手动创建Python包装,它将类似于原始C++对象,包括重载操作符等(StutoOut:我遇到的唯一操作符,在这种情况下可能需要,并且在Python中不可重载为赋值操作符)。 当您希望完全控制正在发生的事情并且不介意在Python中复制接口时,这可能是最好的解决方案

快速法 Boost提供了一个Boost::Python库来处理这个问题。它可以让你导出任何你需要的东西——类,操作符,甚至多个重载方法

唯一的问题是,这个库非常大,而且它是一个非页眉Boost库,因此您需要了解如何使用您的项目构建它,这对于从未使用过Boost的人(比如我)来说可能并不容易

我不知道这个库到底做什么,也许它只是自动化了前面方法中描述的相同的东西。所以我不确定它是减少了额外包装的数量,还是只是简单地为你做了所有艰苦的包装工作,但它做了我需要做的事情

更快的方法 幸运的是,我遇到了另一个选择——pybind11。它是一个相对较小的库,与Boost::Python做相同的事情,并且它只是头文件。它有很好的文档,并且易于使用。它被称为pybind11,因为它最初是用来支持C++11的,但目前它支持C++14和实验性的C++17,但我在C++17项目中使用了它,到目前为止没有发现任何问题

我还不确定哪种方法对我的项目来说是最好的,但现在,我使用pybind11,只是为了在项目开发过程中使它更容易