解决方法@H_502_4@
我面对同样的问题.我希望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)]
这不漂亮,我很乐意看到一个更好的解决方案.
这是一个黑客,说服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)]
这不漂亮,我很乐意看到一个更好的解决方案.