将包含抽象类和普通类C++包导出到 Python

Export C++ Package with Abstract and Normal Classes to Python

本文关键字:C++ 包导出 Python 包含 抽象类      更新时间:2023-10-16

我想将很多抽象和普通类从C++导出到Python。它本质上是一个用C++编码的整个包,并希望它在Python中运行。而不是单独包装每个类,有没有办法轻松包装它们并让它们在 Python 中工作?

使用 cppyy (http://cppyy.org( 是一个选项,并且几乎是自动的:只需加载标头和库。如果确实有大量的标头,那么您可以预编译它们。模板的实例化和交叉继承是在运行时动态完成的,因此不需要准备。

boost python和 pybind11 允许您将C++类"导出"为 python 对象。 两者都提出了基于模板的类似方法。据说Pybind11解决方案更容易使用。如果你使用Microsoft工具链,你可以参考这个页面,了解如何使用 pybind11 设计/构建 python 绑定:

https://learn.microsoft.com/en-us/visualstudio/python/working-with-c-cpp-python-in-visual-studio?view=vs-2019

是的,如果您使用 pybind11 来包装您的C++代码,这是可能的。但是你需要围绕它创建一个包装类。 这里有一个例子

SWIG是另一种可能性。这个使用您现有的C++头文件。请参阅此处并转到第 6.6.3 节,以强制使用 %feature 创建自定义抽象类构造函数

%feature("notabstract") YourClassHere