Enum

У меня есть класс c++ с enum внутри, и я хотел имитировать это с помощью boost::python, так что я могу записать MyClass.value на питоне. boost::python::class_ не имеет метода enum_, и я искал обходные пути.

  1. Впервые я попробовал с lambdas типа

    MyClass{
     enum{value1,value2};
    };
    
    class_("MyClass").add_property("value1",&[](){return value1;}).staticmethod("value1");
    

    , что дает ошибку компилятора (в get_signature для add_property). Я знаю, что мог бы создать метод getter для каждого из значений, но мне это кажется очень неудобным (с точки зрения набора).

  2. Using attr:

    auto classObj=class_("MyClass");
    classObj.attr("value1")=(int)value1;
    classObj.attr("value2")=(int)value2;
    

    , но он не может быть сцеплен как .def и другими методами, возвращающими ссылку на экземпляр.

Есть ли более элегантное решение?

15
задан Andrey Agibalov 31 August 2011 в 12:49
поделиться