c – 如何使用SWIG枚举枚举成员

前端之家收集整理的这篇文章主要介绍了c – 如何使用SWIG枚举枚举成员前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我可以将一个C enum暴露给SWIG作为一个真正的实体,而不是一组常量,所以我可以在 python代码中枚举它们吗?

解决方法

我面对同样的问题.我希望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包装器中具有相同的名称.

在Python中,您可以使用一些代码枚举值

def values(enum):
    return [(k,v) for k,v in vars(enum).items() if isinstance(v,int)]

这不漂亮,我很乐意看到一个更好的解决方案.

猜你在找的C&C++相关文章