主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

列挙型のコードの生成

列挙型は名前付きの値の固定セットを表します。列挙型を使用すると,MATLAB®コードと生成されるC / c++コードが読みやすくなります。たとえば,比较字符串を使用する代わりに,生成されたコードでif (x ==红色)などのコードとの等価性をテストできます。

コード生成で列挙型を使用する場合,次の制限に従います。

  • 列挙型クラスのメソッドの呼び出しはサポートされません。

  • 字符串または文字ベクトルを列挙型のコンストラクターに渡すことはサポートされません。

  • 列挙型クラスはint8uint8int16uint16またはint32のいずれかの基本データ型から派生されなければなりません。コード生成用列挙型の定義を参照してください。

  • 列挙型に対しては限られた一連の操作のみを使用できます。列挙型で実行可能な演算を参照してください。

  • コード生成用に列挙型をサポートする関数で列挙型を使用します。列挙型をサポートするMATLABツールボックス関数を参照してください。

コード生成用列挙型の定義

コード生成では,列挙型クラスはint8uint8int16uint16またはint32のいずれかの基本データ型から派生されなければなりません。以下に例を示します。

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

生成されるC / c++コード内の列挙型のサイズを基本データ型を使用して制御できます。以下を行うことができます。

  • 列挙型を固定サイズの整数で表し,別のターゲットへの移植を可能にします。

  • メモリ使用量を削減します。

  • レガシコードと連動させます。

  • 会社標準に一致させます。

基本データ型は,生成されたC / c++コード内の列挙型の表現を決定します。

基本データ型がint32の場合,コードジェネレーターはCの列挙型を生成します。このMATLAB列挙型定義について考えます。

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

この列挙型の定義は次のCコードになります。

enum led颜色{绿色= 1,红色};typedef enum led颜色;

int32以外の組み込みの整数基本データ型の場合,コードジェネレーターは列挙型に対して类型定义ステートメントを生成し,列挙値に対して#定义ステートメントを生成します。このMATLAB列挙型定義について考えます。

classdefLEDcolor < int16枚举绿(1),红(2)结束结束
列挙型定義は,結果的に次のCコードになります。
typedef短LEDcolor;#define GREEN ((LEDcolor)1) #define RED ((LEDcolor)2)

类型定义ステートメントのCの型は以下に依存します。

列挙型で実行可能な演算

コード生成では,次の表に示す列挙型の演算に制限されます。

演算 メモ

代入演算子:

发送朴通= LEDcolor。绿色xoff = led颜色。红色的

- - - - - -

関係演算子:< > <= >= == ~=

发送朴通= =发送葡开

コード生成では,==または~ =を使用した列挙型メンバーと字符串配列,文字配列または文字配列の细胞配列との間の等価性のテストはサポートされません。

キャスト演算

双(LEDcolor.RED)

- - - - - -

文字配列または字符串への変換

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

  • コンパイル時のスカラー値列挙のみ変換可能。たとえば,次のコードは MATLAB で実行されますが、コード生成ではエラーが発生します。

    y2 =字符串(repmat (LEDcolor.RED 1 2));
  • コードジェネレーターは,変換入力が定数の場合のみ列挙名を維持する。たとえば,次の列挙型定義について考えます。

    classdef AnEnum < int32 enumeration zero(0), two(2), otherTwo(2) end end结束

    生成されたコードは次に対して“两个”を生成します。

    y =字符串(AnEnum.two)
    また次に対して“otherTwo”を生成します。
    y =字符串(AnEnum.otherTwo)

インデックス演算

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

- - - - - -

制御フローステートメント:如果开关,虽然

if state == sysMode. sys . sys . sys . sys . sys . sys . sys . sys . sys . sys。ON led = LEDcolor.GREEN;else led = LEDcolor.RED;结束

- - - - - -

列挙型をサポートするMATLABツールボックス関数

コード生成では,次のMATLABツールボックス関数で列挙型を使用できます。

関連するトピック