コマンド ラインでの入力としてのオブジェクトの指定
codegen
を使用してコードを生成する場合、値クラス オブジェクトである入力の型を指定するために、-args
オプションを使用してオブジェクト例を指定できます。
値クラスを定義します。たとえば、クラス
myRectangle
を定義します。classdef myRectangle properties length; width; end methods function obj = myRectangle(l,w) if nargin > 0 obj.length = l; obj.width = w; end end function area = calcarea(obj) area = obj.length * obj.width; end end end
値クラスのオブジェクトを入力として取得する関数を定義します。次に例を示します。
function z = getarea(r) %#codegen z = calcarea(r); end
クラスのオブジェクトを作成します。
rect_obj = myRectangle(4,5)
rect_obj = myRectangle with properties: length: 4 width: 5
-args
オプションを使用して、オブジェクト例をcodegen
に渡します。codegen getarea -args {rect_obj} -report
コード生成レポートで、
r
にオブジェクト例rect_object
と同じプロパティlength
およびwidth
があることがわかります。プロパティのサイズと型は、オブジェクト例rect_object
と同じです。
オブジェクト例を指定する代わりに、値クラスのオブジェクトの型を作成し、-args
オプションを使用してその型を指定することができます。
クラスのオブジェクトを作成します。
rect_obj = myRectangle(4,5)
rect_obj = myRectangle with properties: length: 4 width: 5
プロパティの型が
rect_obj
と同じmyRectangle
のオブジェクトに対する型を作成するには、coder.typeof
を使用します。coder.typeof
は、クラスに対する型を定義するcoder.ClassType
オブジェクトを作成します。t= coder.typeof(rect_obj)
t = coder.ClassType 1×1 myRectangle length: 1×1 double width : 1×1 double
-args
オプションを使用して、型をcodegen
に渡します。codegen getarea -args {t} -report
値クラスの型を作成した後、プロパティの型を変更できます。たとえば、t
のプロパティを 16 ビット整数にするには、次を行います。
t.Properties.length = coder.typeof(int16(1)) t.Properties.width = coder.typeof(int16(1))
プロパティを追加または削除することもできます。たとえば、newprop
プロパティを追加する方法は以下のとおりです。
t.Properties.newprop = coder.typeof(int16(1))
coder.ClassType
オブジェクトとクラス定義ファイル間の整合性
コードを生成するとき、codegen
に渡される coder.ClassType
オブジェクトのプロパティはクラス定義ファイル内のプロパティと一致していなければなりません。コードで使用されていないプロパティがクラス定義ファイルに存在する場合、coder.ClassType
オブジェクトはこれらのプロパティを含める必要はありません。コード ジェネレーターは、使用されていないプロパティを削除します。
オブジェクトをエントリポイント関数の入力として使用する場合の制限事項
オブジェクトであるエントリポイント関数の入力には次のような制限事項があります。
エントリポイント関数の入力であるオブジェクトは、値クラスのオブジェクトでなければなりません。ハンドル クラスのオブジェクトをエントリポイント関数の入力にすることはできません。そのため、ハンドル クラスを含む値クラスをエントリポイント関数の入力にすることはできません。
オブジェクトをグローバル変数にすることはできません。
オブジェクトに重複するプロパティ名がある場合は、そのオブジェクトを
coder.Constant
で使用できません。次の場合、サブクラスのオブジェクトでプロパティ名が重複します。サブクラスに、スーパークラスのプロパティと同じ名前のプロパティがある。
サブクラスが、プロパティに同じ名前を使用する複数のスーパークラスから派生している。
MATLAB® で重複するプロパティ名が許可される場合の詳細については、複数のクラスからのサブクラスの作成を参照してください。