У меня есть класс С++ с enum внутри, и я хотел подражать этому с помощью boost::python
, чтобы я мог писать MyClass.value
в python. boost::python::class_
не имеет метода enum_
, и я искал обходные пути.
-
Сначала я попытался использовать lambdas, например
MyClass{ enum{value1,value2}; }; class_<MyClass>("MyClass").add_property("value1",&[](){return value1;}).staticmethod("value1");
который дает ошибку компилятора (в
get_signature
дляadd_property
). Я знаю, что я мог бы создать метод getter для каждого из значений, но мне это кажется очень неудобным (типичным). -
Использование
attr
:auto classObj=class_<MyClass>("MyClass"); classObj.attr("value1")=(int)value1; classObj.attr("value2")=(int)value2;
но он не может быть привязан как
.def
и другие методы, возвращающие ссылку на экземпляр.
Есть ли более элегантное решение?