我收到了一些看起来像这样的代码:
在“header.hpp”中:
enum class my_enum_type {
val1 = 0;
...
}
在“header_lib.pyx”中:
cdef extern from "header.hpp":
enum my_enum_type:
val1 = 0;
...
...
稍后在“header_lib.pyx”中:
def foo():
...
return my_enum_type.val1
有人告诉我这应该没有问题,但是从我的经验来看,情况并非如此,这在这篇文章中很明显:Defining enums in Cython code that will be used in the C part of code。
但是,如果我写“return val1”,它本身也不识别“val1”。正确的方法是什么?
最佳答案
您可以在Cython中将enum
声明为:
ctypedef enum options: OPT1, OPT2, OPT3
或者
ctypedef enum options:
OPT1,
OPT2,
OPT3
并且示例可能是:
def main():
cdef options test
test = OPT2
f(test)
cdef void f(options inp):
if inp == OPT1:
print('OPT1')
elif inp == OPT2:
print('OPT2')
elif inp == OPT3:
print('OPT3')
运行
main()
时,您将看到"OPT2"
打印。您可以按照此处test
函数所示的相同方式,将变量C
传递给C++
或cdef
函数。