如何用Swig将C++类型安全枚举转换为C#常规枚举
将C++类型安全枚举通过Swig转换为C#常规枚举
问题场景
C++库中有如下形式的类型安全枚举结构:
struct MyEnum { enum Value { One, Two, Three }; MyEnum() : value(-1) {} MyEnum(Value v) : value(v) {} Value value; };
需要通过Swig将其转换为C#的常规枚举,目标输出为:
public enum MyEnum { One, Two, Three }
失败的转换尝试
尝试使用%rename结合flatnested特性进行转换,但未得到预期结果:
%include <enums.swg> %feature("flatnested"); %rename(MyEnum) MyEnum::Value; %ignore MyEnum; struct MyEnum { enum Value { One, Two, Three }; };
可行的解决写法
将结构体改为嵌套匿名枚举的形式后,转换可正常生效:
%include <enums.swg> %feature("flatnested"); %rename(MyEnum) MyEnum::Value; %ignore MyEnum; struct MyEnum { struct Value { enum { One, Two, Three }; }; };
内容的提问来源于stack exchange,提问作者kjoel
相关产品推荐
相关产品推荐

