[英]Class-scoped enum
我有一個帶有枚舉的c ++類,我想用boost::python
模仿它,這樣我就可以在python中編寫MyClass.value
。 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
和其他返回引用實例的方法一樣鏈接。
有更優雅的解決方案嗎?
您可以使用范圍來執行此操作:
#include <boost/python/module.hpp>
#include <boost/python/class.hpp>
#include <boost/python/scope.hpp>
#include <boost/python/enum.hpp>
namespace bp = boost::python;
class MyClass{
public:
enum MyEnum {value1,value2};
};
BOOST_PYTHON_MODULE(nestedtest){
bp::scope the_scope
= bp::class_<MyClass>("MyClass")
;
bp::enum_<MyClass::MyEnum>("MyEnum")
.value("value1", MyClass::value1)
.value("value2", MyClass::value2)
.export_values()
;
}
然后在python中,你的枚舉值是:
In [8]: nestedtest.MyClass.MyEnum.values
Out[8]: {0: nestedtest.MyEnum.value1, 1: nestedtest.MyEnum.value2}
In [9]: nestedtest.MyClass.MyEnum.value1
Out[9]: nestedtest.MyEnum.value1
In [10]: nestedtest.MyClass.MyEnum.value2
Out[10]: nestedtest.MyEnum.value2
(從我的ipython shell,我測試了這個和所有;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.