在生成的代码中自定义枚举类型
对于代码生成,要自定义枚举,请在类定义的静态方法部分中包含下表中列出的方法的自定义版本。
方法 | 描述 | 返回或指定的默认值 | 何时使用 |
---|---|---|---|
| 返回默认枚举值。 | 枚举类定义中的第一个值。 | 对于不同于第一个枚举值的默认值,请提供返回所需默认值的 |
| 指定定义外部定义的枚举类型的文件。 |
| 要使用外部定义的枚举类型,请提供 |
| 指定类名在生成的代码中是否变成前缀。 |
| 如果希望类名称成为生成代码中的前缀,请将 注意 在生成 C++11 枚举类时,代码生成器会忽略此静态方法。 |
generateEnumClass | 指定是否生成 C++11 枚举类 | true - 枚举类以 C++11 代码生成 | 在生成 C++11 代码时,要指示代码生成器为特定的 MATLAB® 枚举生成普通 C 枚举,请将 generateEnumClass 方法的返回值设置为 false 。请参阅生成包含普通 C 枚举的 C++11 代码 (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++11 代码
当您生成 C++11 代码时,您的 MATLAB 枚举类转换为 C++11 枚举类。例如:
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++11 代码包含普通 C 枚举。
enum MyEnumClass16 : short { Orange = 0, // Default value Yellow, Pink };