J'ai une classe C++ avec une énumération à l'intérieur, et je voulais imiter cela avec boost::python
, de sorte que je puisse écrire MyClass.value
en python. boost::python::class_
n'a pas une méthode enum_
, et je cherchais des solutions de contournement.Enum à portée de classe
J'ai d'abord essayé avec lambdas comme
MyClass{ enum{value1,value2}; }; class_<MyClass>("MyClass").add_property("value1",&[](){return value1;}).staticmethod("value1");
qui donne l'erreur du compilateur (en
get_signature
pouradd_property
). Je sais que je pourrais créer une méthode getter pour chacune des valeurs, mais cela me semble très gênant (en termes de typage).En utilisant
attr
:auto classObj=class_<MyClass>("MyClass"); classObj.attr("value1")=(int)value1; classObj.attr("value2")=(int)value2;
mais il ne peut pas être enchaînée comme
.def
et d'autres méthodes de retour référence à l'instance.
Existe-t-il une solution plus élégante?
En dehors de 'MyClass' vous devrez référencer les valeurs enum comme' MyClass :: value1', bien que je sois hors de mon élément avec des trucs boost-python. –
+1 pour avoir pris la peine de formater correctement. –