PyBind11 文档讨论了如何使用enum
here。
显示的示例假定枚举嵌入在一个类中,如下所示:
struct Pet {
enum Kind {
Dog = 0,
Cat
};
Pet(const std::string &name, Kind type) : name(name), type(type) { }
std::string name;
Kind type;
};
py::class_<Pet> pet(m, "Pet");
pet.def(py::init<const std::string &, Pet::Kind>())
.def_readwrite("name", &Pet::name)
.def_readwrite("type", &Pet::type);
py::enum_<Pet::Kind>(pet, "Kind")
.value("Dog", Pet::Kind::Dog)
.value("Cat", Pet::Kind::Cat)
.export_values();
我的情况不同。我有一个全局enum
值,它的值用于改变几个函数的行为。
enum ModeType {
COMPLETE,
PARTIAL,
SPECIAL
};
std::vector<int> Munger(
std::vector<int> &data,
ModeType mode
){
//...
}
我试图像这样注册它:
PYBIND11_MODULE(_mlib, m) {
py::enum_<ModeType>(m, "ModeType")
.value("COMPLETE", ModeType::COMPLETE )
.value("PARTIAL", ModeType::PARTIAL )
.value("SPECIAL", ModeType::SPECIAL )
.export_values();
m.def("Munger", &Munger, "TODO");
}
编译成功并且模块在 Python 中加载,但我没有在模块名称中看到 ModeType。
我能做些什么?