【问题标题】:How to access enum in cython? [duplicate]如何在 cython 中访问枚举? [复制]
【发布时间】:2017-10-19 20:31:30
【问题描述】:

我有一个大型 c++ 代码,我将其包装在 cython 中以从 python 调用。我不确定应该如何在 cython 中调用 enum 中的某些内容。这是我已经尝试过的。但这并不完整。帮助!

演示示例

class Foo{
public:
   Foo1 bar(enum_is type = enum::any) const;
}
enum class enum_is:unsigned int{
 any = 0,
 one = 1,
 two = 2,
}; 

abc.pxd

cdef extern from "headerfile.hpp":
    cdef cpp class enum_is:
        pass

cdef extern from "headerfile.hpp" namespace "enum_is":
    cdef enum_is any
    cdef enum_is one
    cdef enum_is two

abc.pyx

cdef class Pyenum_is:
    cdef enum_is thisobj
            def __cinit__(self,unsigned int val):
                self.pin_isthisobj = <pin_is> val
            def get_pin_is_type(self)
                cdef r={<unsigned int> any:"any",
                        <unsigned int> one:"one",
                        <unsigned int> two:"two"
                       }
                return r[<unsigned int>self.thisobj]

假设我正确包装了枚举类,我需要有关如何在 python 中实际使用枚举的函数的帮助

cdef class PyFoo1
    cdef Foo1 Foo1thisobj
    cdef Foo1* Foo1thisptr

cdef class PyFoo
    cdef Foo Foothisobj
    cdef Foo* Foothisptr
    def bar(self,#pass enum_is object here):
        cdef Foo tempv = self.thisobj.bar(#pass enum here)
        abc = PyFoo()
        abc.Foo1thisobj = tempv
        return abc

有人可以帮助我了解如何在 cython 中继续使用这个枚举

【问题讨论】:

    标签: python c++ enums cython


    【解决方案1】:

    你可以在 Cython 中声明一个枚举,比如

    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')
    

    【讨论】:

    • 我无法理解。您能否编辑您的答案以解释演示示例
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多