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
を持っており、その値はいくつかの関数の動作を変更するために使われます。
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が表示されません。
どうすればよいですか?
あなたは)(export_valuesを呼び出さずに試したことがありますか?私のために働く – ZivS
同じ問題がここにあります。私はこの状況では、 "unscoped列挙型"はより良いフィット感だと思う:https://github.com/pybind/pybind11/blob/master/tests/test_enum.cppしかし、私はまだ "互換性のない関数の引数"型エラーを取得します。 – mark