我收到了一些看起来像这样的代码:

在“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函数。

10-04 14:27