【问题标题】:Accessing c++ class from python从 python 访问 c++ 类
【发布时间】:2012-05-07 22:30:45
【问题描述】:

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

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

【问题讨论】:

    标签: c++ python cython


    【解决方案1】:

    如果您只想调用一个函数,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 *,关于它们是如何构造的可以说很多。看看上面链接的页面 - 它们充满了示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-06
      • 2017-04-14
      • 1970-01-01
      • 2020-08-12
      • 2012-10-17
      • 2019-04-02
      • 1970-01-01
      • 2020-10-28
      相关资源
      最近更新 更多