【问题标题】:C++ header file with Cython带有 Cython 的 C++ 头文件
【发布时间】:2014-10-18 21:43:12
【问题描述】:

我是 cython 的新手。我有这个小 cython 代码示例:

hello_cython.pyx

cdef class Employee:
   'Common base class for all employees'
   cdef public int empCount

   def __init__(self, name, double salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1

   def displayCount(self):
     print "Total Employee %d" % Employee.empCount

   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary\

我使用 setup 编译这个 cython 代码 设置.py

from distutils.core import setup
from Cython.Build import cythonize

setup(
    ext_modules = cythonize("hello_cython.pyx")
)

现在的目标是能够使用来自其他 python 脚本和 C++ 程序的 Employee 类。所以我想在执行 setup.py 时生成一个头文件(.h),它会创建一个 .h 文件和一个 .so 文件,可以从另一个 python 脚本和 .h(生成的相应 .cpp 文件)文件中使用,这样它可以包含在另一个 C++ 程序中,我可以在其中实例化 Employee 类并使用它的成员函数。正如在这个线程中提到的 (Call python code from c via cython) 我加了

cdef public int i;

在类定义之前,当我执行 setup.py 时,它会创建头文件。但问题是,当我将它包含在另一个 C++ 程序中时,Employee 类不可用。我是否在安装文件或 .pyx 文件中缺少某些内容..?或者我正在做一些在这种方法中不可能的事情。

我正在使用 python 3.2 运行 python 脚本。

【问题讨论】:

    标签: python c++ header-files cython


    【解决方案1】:

    差不多了。你想要的

    cdef public class Employee:
        ...
    

    正如public 关键字所决定的,使用生成的头文件对 C/C++ 可见的内容。

    仅使用 cdef public int i;,您只需将变量 i 设为 public。

    另请参阅:http://docs.cython.org/src/tutorial/cdef_classes.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多