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