簡體   English   中英

類范圍的枚舉

[英]Class-scoped enum

我有一個帶有枚舉的c ++類,我想用boost::python模仿它,這樣我就可以在python中編寫MyClass.value boost::python::class_沒有enum_方法,我正在尋找解決方法。

  1. 我第一次嘗試使用lambdas

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

    這會產生編譯器錯誤(在get_signatureadd_property )。 我知道我可以為每個值創建getter方法,但這對我來說似乎很尷尬(打字方式)。

  2. 使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM