Main Content

在生成的代码中自定义枚举类型

对于代码生成,要自定义枚举,请在类定义的静态方法部分中包含下表中列出的方法的自定义版本。

方法描述返回或指定的默认值 何时使用

getDefaultValue

返回默认枚举值。

枚举类定义中的第一个值。

对于不同于第一个枚举值的默认值,请提供返回所需默认值的 getDefaultValue 方法。请参阅指定默认枚举值

getHeaderFile

指定定义外部定义的枚举类型的文件。

''

要使用外部定义的枚举类型,请提供 getHeaderFile 方法,该方法返回定义该类型的头文件的路径。在这种情况下,代码生成器不会生成类定义。请参阅指定头文件

addClassNameToEnumNames

指定类名在生成的代码中是否变成前缀。

false - 不使用前缀。

如果希望类名称成为生成代码中的前缀,请将 addClassNameToEnumNames 方法的返回值设置为 true。请参阅在生成的枚举类型值名称中包含类名称前缀

注意

在生成 C++11 枚举类时,代码生成器会忽略此静态方法。

generateEnumClass

指定是否生成 C++11 枚举类

true - 枚举类以 C++11 代码生成在生成 C++11 代码时,要指示代码生成器为特定的 MATLAB® 枚举生成普通 C 枚举,请将 generateEnumClass 方法的返回值设置为 false。请参阅生成包含普通 C 枚举的 C++11 代码

指定默认枚举值

如果转换为枚举类型的变量的值与枚举类型值之一不匹配,则:

  • 生成的 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;

要包含类名称前缀,请提供返回 trueaddClassNameToEnumNames 方法。例如:

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 枚举,请提供返回 falsegenerateEnumClass 方法。例如:

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
};

相关主题