python - 用 python 包装 C++ 代码(手动)

标签 python c++ wrapper

我有一个主文件(main.cpp)和一个头文件(nodes.hpp)。主文件将 N(任何正整数)作为输入参数,并通过使用头文件的函数给出输出 'x & y'(均为 double )。

注意:

  1. 主文件和头文件都是用 C++ 编写的。
  2. 主文件和头文件都使用 Eigen 库,而不是使用数组、 vector 等数据结构。

我必须为他们编写一个 python 包装器,我有 python 的工作知识,但从未使用过任何包装器。

任何人都可以引用或提供一些关于使用 python wrpper 编写此类代码的注释吗?

最佳答案

以下是您的选择:

  1. 您可以使用 ctypes ,我认为这是最干净的解决方案,因为您将程序转换为共享库,可以被任何其他软件调用,而不仅仅是 Python。不过,您必须自己为您的程序编写 C 接口(interface)。

  2. 您可以使用 Python C-Extension ,我认为这是最糟糕的解决方案,因为它的级别非常低,容易出现内存泄漏,并且需要花费大量时间来实现一个功能,并且依赖于 Python 版本。基本上,在 C++ 中启动 Python 解释器是件好事。您可以创建 PyObject(它是任何 Python 类型的主要构建 block )并在 C/C++ 中处理它们。

  3. 您可以使用 SWIG ,它会自动创建您必须通过您定义的接口(interface)文件使用 ctypes 创建的接口(interface)。人们说它非常好,但文档却没有那么好。

  4. 您可以使用 Boost.Python ,这很好,但是它有一个非常丑陋的 bjam 构建系统。如果你能设法绕过它,那么它甚至比 ctypes 更好。我是 boost 的 super 粉丝,但 bjam 是我不使用它的原因。

我通常做的是 ctypes。我信任它,因为它强调 single-reponsibility principle .该库有一个与接口(interface)(C 接口(interface))分开的作业,它也与使用该接口(interface)并向用户公开“简单功能”的 Python 脚本分开。

关于python - 用 python 包装 C++ 代码(手动),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43387112/

相关文章:

python - 遍历数据框中的行并根据其他列更改列的值

python - 如何在 Python 中创建交互式 3D 图形

python - 用于从 python 句子中获取特定输出的正则表达式

c++ - 使标准控制台出现在快板中

python - 从 python 运行 C 代码并监听变量值

python - 在 python 中按特定顺序对元素进行排序

c++ - 我应该避免在 C++ 中使用#define 吗?为什么,我可以使用哪些替代方案?

c++ - 找出是否在 C++ 项目中调用了函数?

c# - 如何在.NET 中包装程序集?

java - JavaFX:基于属性的实体与基于属性的包装器