我有一个很大的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中使用这个枚举
答案 0 :(得分:0)
您可以在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')