带有Cython的C++头文件

C++ header file with Cython

本文关键字:文件 C++ Cython 带有      更新时间:2023-10-16

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

hello_ython.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

我使用安装程序编译这个cython代码setup.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并使用其成员函数。如本条所述(通过cython从c调用python代码)我添加了

cdef public int i;

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

我使用python 3.2来运行python脚本。

差不多到了。你想要

cdef public class Employee:
    ...

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

只使用cdef public int i;,就只公开变量i

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