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 メソッドを methods セクションに追加します。この例では、最初の列挙型メンバー値は 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 メソッドを指定します。この例では、LEDcolor が外部ファイル my_LEDcolor.h で定義されるように指定します。

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

関連するトピック