Main Content

MATLAB Coder アプリでの入力としてのオブジェクトの指定

MATLAB® Coder™ アプリで、値クラス オブジェクトである入力の型を指定するには、次を行います。

  1. 値クラスを定義します。たとえば、クラス 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

  2. 値クラスのオブジェクトを入力として取得する関数を定義します。次に例を示します。

    function z = getarea(r)
    %#codegen
    z = calcarea(r);
    end

  3. アプリで、getarea に対するプロジェクトを作成します。[入力の型を定義] ページで、次のいずれかの方法でオブジェクトの型を指定します。

オブジェクトの入力の型の自動定義

  • myRectangle クラスのオブジェクトを作成し、それを getarea に渡すテスト ファイル getarea_test を作成します。次に例を示します。

    rect_obj = myRectangle(4,5);
    rect_area = getarea(rect_obj);
    disp(rect_area);

  • アプリの [入力の型を定義] ページで、テスト ファイル getarea_test を指定します。

  • [入力の型の自動定義] をクリックします。

例の提供

値クラスのオブジェクトを指定すると、アプリでは、そのオブジェクト例のプロパティのサイズと型が使用されます。

  1. MATLAB で、値クラス myRectangle のオブジェクトを定義します。

    rect_obj = myRectangle(4,5)

  2. アプリの [入力の型を定義] ページで [入力またはグローバルの型を直接入力します] をクリックします。

  3. 入力パラメーター r の右にあるフィールドをクリックします。

  4. [例で定義] を選択します。

  5. rect_obj を入力するか、ワークスペース変数のリストから選択します。

    アプリは、オブジェクト例からプロパティおよびそのサイズと型を判断します。

    App window, showing the inferred types and sizes of the length and width properties of the myRectangle object

または、値クラス myRectangle の名前、またはそのクラスの coder.ClassType オブジェクトを指定できます。coder.ClassType オブジェクトを定義するには、coder.typeof を使用します。次に例を示します。

  1. MATLAB で、rect_obj と同じプロパティがある coder.ClassType オブジェクトを定義します。

    t = coder.typeof(rect_obj)

  2. アプリで、t を例として指定します。

プロパティのサイズまたは型を変更するには、プロパティの右側のフィールドをクリックします。

型定義とクラス定義ファイルにおける整合性

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

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

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

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

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

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

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

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

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

参考

関連するトピック