【问题标题】:How to extend Python with C++?如何用 C++ 扩展 Python?
【发布时间】:2015-02-15 20:37:51
【问题描述】:

我有执行以下操作的 Python 代码:

  1. 从仿真软件中获取优化问题。

  2. 使用多线程IPOPT算法解决了这个优化问题。

  3. 将2中得到的结果转换为另一个维度。

  4. 以图形的形式显示结果。

现在我用 C++ 编写了一个类来解决优化问题(第 2 点)以提高速度以及出于其他一些原因,它从第 1 点(问题、约束等)接收输出并给出输出进一步传递到第 3 点(Python 中的一个函数)。

如何将这些从 1 中获得的变量传递给 2 中的 C++ 类,然后返回到 3 中的 Python 函数?以下是我正在尝试的:

我使用 SWIG 来生成包装文件。用于 SWIG 为 2.cpp2.h C++ 文件创建包装器的接口文件:

/* File: 2.i */
%module t2c_main
%{
#define SWIG_FILE_WITH_INIT
#include "../include/2.h"
%}
%include ../include/2.h

运行 SWIG 后,我得到了一个 Python 文件和一个 cxx 文件。现在我在使用这些文件时遇到了问题;如上所述,我需要传递变量。

【问题讨论】:

    标签: python c++ wrapper swig


    【解决方案1】:

    您传递变量的方式显然取决于您存储数据的方式。不过,我们假设 t2c_main 模块包含一个方法 addDataPoint(int,int);

    然后你会做以下事情:

    • 将生成的 cpp 文件与您的 2.cpp 一起编译并链接到动态库中。
    • 如果生成的python文件命名为t2c.py,将刚才编译的动态库重命名为_t2c.pyd(注意下划线,其实很重要)。
    • 在您的 python 代码中导入 t2c 模块

    你现在应该可以做类似的事情了

    t2c.addDataPoint(5,10)
    

    在你的 python 代码中。

    【讨论】:

    • 感谢您的支持和帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多