我正在使用 Cython 包装一些 C++ 代码,但嵌套在两个命名空间中的匿名枚举存在一些问题。
来自 some_header.hpp
的示例定义:
namespace A {
namespace B {
enum {
X = 0,
Y = 1,
Z = 2
};
}
}
上述头文件的我的.pxd
文件:
cdef extern from 'some_header.hpp' namespace 'A::B':
cdef enum:
CX 'A::B::X' \
CY 'A::B::Y' > Can this be simplified somehow?
CZ 'A::B::Z' /
我的.pyx
包装器模块:
class B(IntEnum):
X = CX \
Y = CY > CX, CY and CZ are global in my .pyx module
Z = CZ /
我可以在我的 .pyx
文件中使用 CX
、CY
和 CZ
,如上所示,但如果我能做一些类似 CB.X、CB.Y 和 CB.Z 的事情,那就太好了。 CX/CY/CZ
在我的模块中不会是全局的。
.pxd
中的扩展命名空间 'A::B::X'
是否可以简化或删除?
最佳答案
一种方法是使用一个非常小的 pxd
文件,在其命名空间内仅声明此枚举。这样,枚举在 Cython 代码的其余部分中就有一个简单的命名空间。我可以让它在 OS X 上编译/工作:
接口(interface).pxd
文件:
# a.pxd
cdef extern from "some_header.cpp" namespace "A::B":
cdef enum:
X
Y
Z
以及演示代码
cimport a
cpdef foobar():
return a.X, a.Y, a.Z # enum values are namespaced inside `a`
关于python - 如何在 Cython 中包装匿名枚举并为其命名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42960666/