メインコンテンツ

値クラス オブジェクトを入力として指定

MATLAB® Coder™ アプリを使用するか、コマンド ラインで codegen コマンドを使用して、値クラスのインスタンスを入力変数として指定できます。場合によっては、入力変数がプロパティ検証を含むユーザー記述の MATLAB クラスである場合、関数の引数の検証を使用して入力の型を指定できます。Use User-Written MATLAB Classes in arguments Blocksを参照してください。エントリポイント関数に対するハンドル クラスの入力はコード生成でサポートされていません。

値クラスを入力の型として指定するには、クラス定義が作業ディレクトリまたは MATLAB パス上になければなりません。

  • MATLAB Coder を使用してコードを生成する場合、値クラスの入力を自動または手動で定義できます。値クラスの入力を手動で定義する場合は、値クラスのインスタンスを生成する MATLAB コマンドを入力するように求めるプロンプトが表示されます。

  • コマンド ラインで codegen コマンドを使用してコードを生成する場合、値クラスのインスタンスを作成し、-args オプションを使用してこのオブジェクトを codegen に渡します。

別の方法として、コマンド ラインで coder.typeof を使用するか、対話形式でコード生成の型エディターを使用すると、値クラスのオブジェクトの型を作成できます。コード生成の型エディターを使用した入力の型の作成と編集を参照してください。

例: 値クラスの入力を受け取るエントリポイント関数のコードの生成

エントリポイント関数 calcArea について考えます。この関数は、値クラス MyRectangle のインスタンスを受け取り、MyRectangle オブジェクトの length プロパティと width プロパティを乗算します。

function out = calcArea(r) %#codegen
out = r.length*r.width;
end

値クラス MyRectangle は作業ディレクトリで定義されているか MATLAB パス上にあるものとします。

classdef MyRectangle
    properties
        length (1,1) double
        width (1,1) double
    end
end

MATLAB Coder アプリを使用したコードの生成

calcArea をエントリポイント関数として定義します。[エントリ ポイント] ペインを開き、入力変数 r の横にある [クリックしてデータ型を定義してください] をクリックします。クラス定義のボックスに「MyRectangle」と入力します。MyRectangle オブジェクトを生成する MATLAB コードを入力するように求めるプロンプトが表示されます。このプロンプトで「MyRectangle」と入力します。length プロパティと width プロパティの型がクラス定義に基づいて決定されます。

Entry Points pane showing input specification for input argument r, which is an instance of the MyRectangle class.

コードを生成するには、MATLAB Coder ツールストリップまたはコード生成サイドバーの [出力] セクションで [コード生成] をクリックします。

codegen コマンドを使用したコードの生成

コマンド ラインで MyRectangle クラスのインスタンスを作成し、このインスタンスを codegen コマンドに渡します。

myObj = MyRectangle
myObj = 

  MyRectangle with properties:

    length: 0
     width: 0

codegen calcArea -args {myObj} -report
Code generation successful: View report

レポートを開いて [変数] タブをクリックします。入力引数 r のプロパティが myObj オブジェクトと同じになっています。

Code generation report window showing properties length and width of MyRectangle object r

型定義とクラス定義との整合性

コードを生成するとき、アプリで定義するプロパティや codegen に渡すオブジェクトのプロパティは、クラス定義ファイルのプロパティと一致していなければなりません。ただし、コードで使用しないプロパティがクラス定義ファイルにある場合、それらのプロパティを型定義に含める必要はありません。コード ジェネレーターは、使用されていないプロパティを削除します。

オブジェクトをエントリポイント関数の入力として使用する場合の制限事項

オブジェクトであるエントリポイント関数の入力には次のような制限事項があります。

  • エントリポイント関数の入力であるオブジェクトは、値クラスのオブジェクトでなければなりません。ハンドル クラスのオブジェクトをエントリポイント関数の入力にすることはできません。そのため、ハンドル クラスを含む値クラスをエントリポイント関数の入力にすることはできません。

  • オブジェクトをグローバル変数にすることはできません。

  • オブジェクトに重複するプロパティ名がある場合は、そのオブジェクトを coder.Constant で使用できません。次の場合、サブクラスのオブジェクトでプロパティ名が重複します。

    • サブクラスに、スーパークラスのプロパティと同じ名前のプロパティがある。

    • サブクラスが、プロパティに同じ名前を使用する複数のスーパークラスから派生している。

    MATLAB で重複するプロパティ名が許可される場合の詳細については、複数のクラスからのサブクラスの作成を参照してください。

参考

トピック