pybind11:枚举与枚举 Class?
pybind11: Enum vs Enum Class?
我理解枚举和枚举之间的区别 类 在 C++ 上下文中,但是在绑定枚举和枚举的上下文中 类 有什么真正的区别吗?
比如说:
enum class options {
maybe,
yes,
no,
};
enum words {
hello,
world
};
我只是以相同的方式绑定它们(见下文),所以我的问题是,我是否忽略了某些东西,或者枚举和枚举 类 在将它们绑定到 python 与 pybind11?
py::enum_<options>(m, "options")
.value("maybe", options::maybe)
.value("yes", options::yes)
.value("no", options::no);
py::enum_<words>(m, "words")
.value("hello", words::hello)
.value("world", words::world)
根据 docs,看来唯一的区别是:
The enum_::export_values()
function exports the enum entries into the parent scope, which should be skipped for newer C++11-style strongly typed enums.
因此,通过 not 调用 export_values
,Python 将在指定值时要求将枚举名称作为范围的一部分,这在概念上更接近 enum class
比 enum
.
值得注意的是 Python 的 Enum
不允许像 C++ 的 enum
那样的隐式 int
转换。为此,您需要 IntEnum
- 但我不确定您是否可以从 pybind 创建 IntEnum
s。
我理解枚举和枚举之间的区别 类 在 C++ 上下文中,但是在绑定枚举和枚举的上下文中 类 有什么真正的区别吗?
比如说:
enum class options {
maybe,
yes,
no,
};
enum words {
hello,
world
};
我只是以相同的方式绑定它们(见下文),所以我的问题是,我是否忽略了某些东西,或者枚举和枚举 类 在将它们绑定到 python 与 pybind11?
py::enum_<options>(m, "options")
.value("maybe", options::maybe)
.value("yes", options::yes)
.value("no", options::no);
py::enum_<words>(m, "words")
.value("hello", words::hello)
.value("world", words::world)
根据 docs,看来唯一的区别是:
The
enum_::export_values()
function exports the enum entries into the parent scope, which should be skipped for newer C++11-style strongly typed enums.
因此,通过 not 调用 export_values
,Python 将在指定值时要求将枚举名称作为范围的一部分,这在概念上更接近 enum class
比 enum
.
值得注意的是 Python 的 Enum
不允许像 C++ 的 enum
那样的隐式 int
转换。为此,您需要 IntEnum
- 但我不确定您是否可以从 pybind 创建 IntEnum
s。