生成されたコードにおける列挙型のカスタマイズ
コード生成で列挙型をカスタマイズするには、クラス定義の静的メソッド セクションに次の表に示すカスタマイズされたメソッドのバージョンを含めます。
メソッド | 説明 | 返されるまたは指定される既定値 | 使用時 |
---|---|---|---|
| 既定の列挙値を返します。 | 列挙型クラス定義の最初の値。 | 最初の列挙型の値とは異なる既定値の場合、必要な既定値を返す |
| 外部で定義された列挙型を定義するファイルを指定します。 |
| 外部で定義された列挙型を使用するには、型を定義するヘッダー ファイルへのパスを返す |
| 生成コードでクラス名を接頭辞にするかどうかを指定します。 |
| 生成されたコードでクラス名を接頭辞にするには、 メモ 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
をパッケージ pkg
内に配置して C++ コードを生成する場合は、コード生成でこの列挙の名前が保持され、生成されたコードの名前空間 pkg
内に配置されます。したがって、指定するヘッダー ファイルで、名前空間 pkg
内のこの列挙を定義する必要があります。
生成された列挙型の値の名前にクラス名の接頭辞を含める
既定では、生成された列挙型の値の名前はクラス名の接頭辞を含みません。以下に例を示します。
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 };