在 python 中导入 C++ 类?

Posted

技术标签:

【中文标题】在 python 中导入 C++ 类?【英文标题】:Import C++ classes in python? 【发布时间】:2009-11-17 17:39:56 【问题描述】:

所以.. 假设我有这个 C 函数:

PyObject* Foo(PyObject* pSelf, PyObject* pArgs)

    MessageBox(NULL, "Foo was called!", "Info", MB_OK);
    return PyInt_FromLong(0);

然后,我必须这样做:

static PyMethodDef Methods[] = 

    "Foo", Foo, METH_NOARGS, "Dummy function",
    NULL, NULL, 0, NULL
;
Py_InitModule("bar", Methods);

然后我执行我的 python 脚本.. 但是 C 函数有点烦人,它是 C++,我几乎所有东西都使用类。

那么,有什么方法可以将成员函数从一个类导入到我的 python 脚本中?

哦,顺便说一句,python 脚本看起来像这样:

import bar
from bar import *
Foo()

【问题讨论】:

【参考方案1】:

boost.python 使您能够非常有效地做到这一点。

【讨论】:

【参考方案2】:

SWIG 也可以很好地工作。

【讨论】:

【参考方案3】:

看看boost python 页面。搜索“免费功能”。

【讨论】:

【参考方案4】:

Cython 拥有我发现的最好的 C++ wrapping,尽管它比 SWIG 更冗长一些,而且它有点需要进入的心态。编写映射比 SWIG 更容易——因为它使用 Python 类型——但你必须手动编写它们。这也是一个非常活跃的项目,有一个非常友好的邮件列表。它对 NumPy 也有很好的缓冲支持。

【讨论】:

以上是关于在 python 中导入 C++ 类?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 程序将使用的 Python 脚本中导入 cpython 模块?

有没有办法使用 SWIG C++ 创建一个 python 模块,可以在 Python2 和 Python3 中导入

在嵌入式 Python C++ 应用程序中导入 Numpy

ImportError:在 python 中导入 swigged c++-class 时未定义的符号

在 python 类中导入模块

如何在另一个 python 文件中导入屏幕类?