Class-scoped enum
Class-scoped enum
本文关键字:enum Class-scoped 更新时间:2023-10-16
我有一个c++类,里面有一个enum,我想用boost::python
模仿它,这样我就可以用python写MyClass.value
。boost::python::class_
没有enum_
方法,我正在寻找解决方案。
-
我第一次尝试使用像
这样的lambdaMyClass{ enum{value1,value2}; }; class_<MyClass>("MyClass").add_property("value1",&[](){return value1;}).staticmethod("value1");
导致编译错误(
get_signature
为add_property
)。我知道我可以为每个值创建getter方法,但这对我来说似乎很尴尬(类型方面)。 -
Using
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
(从我的python shell中,我测试了这个和所有;)
相关文章:
- enum是C++中的宏变量还是整数变量
- 是否可以从int转换为enum类类型
- 在一个模板函数中,若输入的类型是enum类,我该如何使用std::underlying_type
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- "Undefined class"作为is_base_of的论据
- 如何将class.cpp和class.hpp编译为一个.o文件
- 在C++中,将int值赋给enum,反之亦然
- 两个 COM 组件中 ENUM 的重复条目
- 将枚举类型保存在位字段 [dcl.enum] [class.bit] 中
- 如何 std::map<enum class, std::string>?
- "enum class"是C++中的类类型吗?
- "enum class" Visual C++ 2012 中是什么意思?
- C++:使用"enum class"的类内部的枚举
- 我可以在DLL边界使用“enum class”作为函数的参数类型吗
- Month的表示:enum class与class
- 是否可以使作用域枚举("enum class")在上下文中可转换为布尔值?
- Class-scoped enum
- 如何访问封装在类中的未命名"enum class"?