gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:25:34 25 4
gpt4 key购买 nike

我有一个主文件(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com