解决方法
我面对同样的问题.我希望SWIG很快支持C11的枚举类.
这是一个黑客,说服SWIG将枚举放在一个结构中:
- #ifdef SWIG
- %rename(MyEnum) MyEnumNS;
- #endif
- struct MyEnumNS
- {
- enum Value { Value1,Value2,Value3 };
- };
- typedef MyEnumNS::Value MyEnum;
在.cpp代码中,您现在必须使用MyEnum :: Value1,而在Python代码中,它是MyEnum.Value1.虽然复杂,typedef阻止不必更改现有的使用枚举的代码,SWIG%重命名使枚举在SWIG包装器中具有相同的名称.
- def values(enum):
- return [(k,v) for k,v in vars(enum).items() if isinstance(v,int)]
这不漂亮,我很乐意看到一个更好的解决方案.