在生成的代码中自定义枚举类型
对于代码生成,要自定义枚举,请在类定义的静态方法部分中包含下表中列出的方法的自定义版本。
| 方法 | 描述 | 返回或指定的默认值 | 何时使用 |
|---|---|---|---|
| 返回默认枚举值。 | 枚举类定义中的第一个值。 | 对于不同于第一个枚举值的默认值,请提供返回所需默认值的 |
| 指定定义外部定义的枚举类型的文件。 |
| 要使用外部定义的枚举类型,请提供 |
| 指定类名在生成的代码中是否变成前缀。 |
| 如果希望类名称成为生成代码中的前缀,请将 注意 当生成枚举类(C++11 和更新标准)时,代码生成器忽略此静态方法。 |
generateEnumClass | 指定是否生成枚举类 | true - 枚举类在 C++ 代码中生成 | 在生成 C++11(或更新版本)代码时,要指示代码生成器为特定的 MATLAB® 枚举生成普通 C 枚举,请将 generateEnumClass 方法的返回值设置为 false。请参阅生成包含普通 C 枚举的 C++ 代码 (MATLAB Coder)。 |
指定默认枚举值
如果转换为枚举类型的变量的值与枚举类型值之一不匹配,则:
生成的 MEX 会报告错误。
生成的 C/C++ 代码会将变量的值替换为枚举类型的默认值。
除非您另有指定,否则枚举类型的默认值是枚举类定义中的第一个值。要指定不同的默认值,请在方法部分添加您自己的 getDefaultValue 方法。在此示例中,第一个枚举成员值是 LEDcolor.GREEN,但 getDefaultValue 方法返回 LEDcolor.RED:
classdef LEDcolor < int32 enumeration GREEN(1), RED(2) end methods (Static) function y = getDefaultValue() y = LEDcolor.RED; end end end
指定头文件
要指定在外部文件中定义枚举类型,请提供自定义的 getHeaderFile 方法。此示例指定在外部文件 my_LEDcolor.h 中定义 LEDcolor。
classdef LEDcolor < int32 enumeration GREEN(1), RED(2) end methods(Static) function y=getHeaderFile() y='my_LEDcolor.h'; end end end
您必须提供 my_LEDcolor.h。例如:
enum LEDcolor
{
GREEN = 1,
RED
};
typedef enum LEDcolor LEDcolor;如果将 MATLAB 枚举 LEDcolor 放在MATLAB 命名空间 nmsp 中并生成 C++ 代码,代码生成会保留此枚举的名称,并将其放在生成代码中的 C++ 命名空间 nmsp 内。因此,在您提供的头文件中,您必须在命名空间 nmsp 内定义此枚举。
在生成的枚举类型值名称中包含类名称前缀
默认情况下,生成的枚举类型值名称不包括类名称前缀。例如:
enum LEDcolor
{
GREEN = 1,
RED
};
typedef enum LEDcolor LEDcolor;
要包含类名称前缀,请提供返回 true 的 addClassNameToEnumNames 方法。例如:
classdef LEDcolor < int32 enumeration GREEN(1), RED(2) end methods(Static) function y = addClassNameToEnumNames() y=true; end end end
在生成的类型定义中,枚举值名称包括类前缀 LEDcolor。
enum LEDcolor
{
LEDcolor_GREEN = 1,
LEDcolor_RED
};
typedef enum LEDcolor LEDcolor;生成包含普通 C 枚举的 C++ 代码
当您使用支持枚举类的语言标准(C++11 或更高版本)生成代码时,您的 MATLAB 枚举类会转换为 C++ 枚举类。例如:
enum class MyEnumClass16 : short
{
Orange = 0, // Default value
Yellow,
Pink
};要生成普通 C 枚举,请提供返回 false 的 generateEnumClass 方法。例如:
classdef MyEnumClass16 < int16 enumeration Orange(0), Yellow(1), Pink(2) end % particular enum opting out methods(Static) function y = generateEnumClass() y = false; end end end
现在生成的代码包含普通 C 枚举。
enum MyEnumClass16 : short
{
Orange = 0, // Default value
Yellow,
Pink
};另请参阅
主题
- 修改超类方法和属性
- Code Generation for Enumerations
- 更改用于代码生成的语言标准 (MATLAB Coder)