1
PyBind11 설명서에서는 enum
here을 사용하는 방법에 대해 설명합니다. 표시PyBind11 전역 수준 열거 형
예는 열거 형과 같이, 클래스 내에 포함되어 있다고 가정합니다
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
있습니다.
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");
}
컴파일이 성공하고, 파이썬에서 모듈로드,하지만 난 모듈의 이름에 ModeType이 표시되지 않는 :
enum ModeType {
COMPLETE,
PARTIAL,
SPECIAL
};
std::vector<int> Munger(
std::vector<int> &data,
ModeType mode
){
//...
}
그래서처럼 등록을 시도했다.
어떻게해야합니까?
당신이 봤어 export_values를 호출하지 않고()? 나를 위해 일 – ZivS
같은 문제는 여기에. 이 상황에서 "unscoped enum"이 더 적합하다고 생각합니다. https://github.com/pybind/pybind11/blob/master/tests/test_enum.cpp하지만 여전히 "호환되지 않는 함수 인수"유형 오류가 발생합니다. – mark