gpt4 book ai didi

c++ - 从 python 访问 C++ 类

转载 作者:太空宇宙 更新时间:2023-11-04 14:16:44 25 4
gpt4 key购买 nike

我在单个 .cpp 文件中有一个很大的 c++ 程序,它定义了很多类(彼此相互依赖),最后运行一个主函数。现在我只对在 python 中使用此类之一感兴趣,特别是此类的一种方法,它接受 5 个 float 作为输入并输出一个 float 。我正在尝试找到实现此目的的最简单方法。在使用 boost:python 没有成功之后(主要是因为安装问题)我来到了 Cython,它在当前版本中支持 C++。我可以成功运行 Cython 教程中给出的 Rectangle 示例,但我不知道如何继续并适应我的情况,因为我不需要如此复杂的 .pyx 文件,而且我没有 .h文件。如果我的 .cpp 文件具有例如结构,有人可以用简单的话向我解释我应该在 setup.py 和 .pyx 文件中写什么:

...
class Nuclei {
public:
...
double potential(float,float,float,float,float);
...
private:
...
};
...

最佳答案

如果您只想调用一个函数,Extending Python With C/C++可能是最简单的方法。 This page提供了一个很好的例子。

那个例子中相关的setup.py代码是

from distutils.core import setup, Extension

module1 = Extension('demo',
define_macros = [('MAJOR_VERSION', '1'),
('MINOR_VERSION', '0')],
include_dirs = ['/usr/local/include'],
libraries = ['tcl83'],
library_dirs = ['/usr/local/lib'],
sources = ['demo.c'])

setup (name = 'PackageName',
version = '1.0',
description = 'This is a demo package',
author = 'Martin v. Loewis',
author_email = 'martin@v.loewis.de',
url = 'http://docs.python.org/extending/building',
long_description = '''
This is really just a demo package.
''',
ext_modules = [module1])

如果你要调用的C++代码在demo.c中,可以在Python中使用import demo

请注意,它远没有那么简单——您将创建一个函数,该函数接受一个带参数的 PyObject * 并返回一个 PyObject *,关于这些函数的构造方式可以说很多。查看上面链接的页面 - 它们充满了示例。

关于c++ - 从 python 访问 C++ 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10490027/

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