You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 08:19:52