主要内容

为枚举代码生成

枚举表示一组固定的命名值。枚举帮助使你的MATLAB®代码和生成的C / c++代码更加可读。例如,生成的代码可以测试平等与代码等if (x = =红色)而不是使用比较字符串

对于代码生成,当你用枚举,遵守这些限制:

  • 不支持枚举类的调用方法。金宝app

  • 通过字符串或字符不支持向量的构造函数枚举。金宝app

  • 枚举类必须来自这些基本类型之一:int8,uint8,int16,uint16,int32,或uint32。看到定义枚举代码生成

  • 的成员uint32枚举,代码生成支持值小于或等于金宝appintmax (“int32”)

  • 你可以只使用一组有限的枚举的操作。看到对枚举允许操作

  • 使用枚举函数支持枚举类型代码生成。金宝app看到MATLAB工具箱支持枚举的功能金宝app

定义枚举代码生成

对于代码生成,枚举类必须来自这些基本类型之一:int8,uint8,int16,uint16,int32,或uint32。例如:

classdefPrimaryColors < int32枚举红色(1),蓝色(2),黄色(4)结束结束

您可以使用基本类型来控制一个枚举类型的大小在生成的C / c++代码。您可以:

  • 枚举类型表示为一个固定大小的整数,移植到不同的目标。

  • 减少内存使用量。

  • 遗留代码的界面。

  • 符合公司的标准。

在生成的代码表示的枚举类型

枚举类型的表示在生成的C / c++代码取决于以下:

  • MATLAB枚举的基类型

  • 目标语言(C或c++)

  • 如果目标语言c++,目标语言标准(C + + 03或c++ 11)

基本类型是本地整数类型。如果基类型目标平台的本机整数类型(例如,int32),代码生成器生成C / c++枚举类型。考虑一下这个MATLAB枚举类型定义:

classdefLEDcolor < int32枚举绿(1),红(2)结束结束

如果您生成C代码或c++ 03代码,生成的枚举是:

enum LEDcolor{绿= 1,红};

如果您生成c++ 11代码,生成的代码包含一个枚举类(默认情况下)显式地定义了基本类型:

enum类LEDcolor: int{绿= 1,红};

基本类型是不同于本机整数类型。假设内置整数基类型的枚举不同于目标平台的本机整数类型。例如,考虑这样的MATLAB枚举类型定义:

classdefLEDcolor < int16枚举绿(1),红(2)结束结束

  • 如果您生成C代码,代码生成器生成类型定义枚举类型和声明#定义枚举值的语句。例如,枚举类型定义LEDcolor产生这个C代码:

    typedef短LEDcolor;#定义绿色((LEDcolor) 1) # define红色((LEDcolor) 2)

  • 如果您生成c++ 03代码,转换为枚举成员常数。这些常量属于命名空间包含枚举类型定义在生成c++代码。

    例如,假设你把枚举类型定义LEDcolor内包包裹。代码生成器的默认行为是MATLAB包转换为c++名称空间。生成c++代码放置在名称空间中包裹:

    名称空间包裹{typedef短LEDcolor;/ /枚举pkg_LEDcolor const LEDcolor绿色{1};const LEDcolor红色{2};}
  • c++ 11允许您指定底层的枚举类型,就像MATLAB。如果您生成c++代码11,MATLAB枚举类转换为一个c++枚举类(默认情况下)显式地定义了潜在的类型。

    例如,假设你把枚举类型定义LEDcolor内包包裹。代码生成器的默认行为是MATLAB包转换为c++名称空间。生成c++代码11放置在名称空间中包裹:

    名称空间包裹{enum类LEDcolor:短{绿色= 1 / /默认值红色};}

C / c++类型的类型定义语句或底层的c++ 11枚举类型取决于:

生成c++代码11包含普通C枚举。您可以更改默认行为的代码生成器产生普通C枚举在生成c++代码11。做下列之一:

  • 在代码生成配置对象,设置CppGenerateEnumClass财产

  • MATLAB编码器™应用程序,生成上一步,代码的外观选项卡上,清晰的从MATLAB枚举生成c++ enum类复选框。

指示代码生成器生成普通C枚举特定MATLAB代码中枚举类,包括静态方法generateEnumClass返回在MATLAB枚举类的实现。看到在生成的代码自定义枚举类型

对枚举允许操作

对于代码生成,您被限制在枚举表中列出的操作。

操作 例子 笔记

赋值运算符:=

发送朴通= LEDcolor。绿色发送葡开= LEDcolor.RED

- - - - - -

关系运算符:< > < = > = = = ~ =

发送朴通= =发送葡开

不支持使用生成代码金宝app= =~ =测试枚举成员之间的平等和一个字符串数组,字符数组或单元格字符数组的数组。

铸造操作

双(LEDcolor.RED)

- - - - - -

转换为字符数组或字符串

y = char (LEDcolor.RED);日元=投(LEDcolor.RED,“字符”);y2 =字符串(LEDcolor.RED);

  • 你只能把编译时枚举标量值。例如,这段代码运行在MATLAB中,但会产生一个错误代码生成:

    y2 =字符串(repmat (LEDcolor.RED 1 2));
  • 代码生成器保留枚举名称时转换的输入是常数。例如,考虑一下这个枚举类型定义:

    classdef AnEnum < int32枚举零(0),两(2),otherTwo(2)结束

    生成的代码生成“两个”

    y =字符串(AnEnum.two)
    “otherTwo”
    y =字符串(AnEnum.otherTwo)

索引操作

m = [1 - 2] n = LEDcolor (m) p = n (LEDcolor.GREEN)

- - - - - -

控制流语句:如果,开关

如果= = sysMode状态。在领导= LEDcolor.GREEN;其他领导= LEDcolor.RED;结束

- - - - - -

MATLAB工具箱支持枚举的功能金宝app

对于代码生成,您可以使用枚举这些MATLAB工具箱函数:

相关的话题