为枚举代码生成
枚举表示一组固定的命名值。枚举帮助使你的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枚举类型取决于:
整数的大小定义为生产硬件的硬件实现对象或项目设置。看到
coder.HardwareImplementation
。内置的设置决定了使用C类型或MathWorks®typedef在生成的代码。看到指定生成的代码中使用的数据类型和MATLAB的类型映射到生成的代码类型。
生成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); |
|
索引操作 |
m = [1 - 2] n = LEDcolor (m) p = n (LEDcolor.GREEN) |
- - - - - - |
控制流语句:如果,开关 |
如果= = sysMode状态。在领导= LEDcolor.GREEN;其他领导= LEDcolor.RED;结束 |
- - - - - - |
MATLAB工具箱支持枚举的功能金宝app
对于代码生成,您可以使用枚举这些MATLAB工具箱函数: