最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

coder.typeof

エントリポイント関数の入力の型を表す coder.Type オブジェクトを作成します。

説明

type_obj = coder.typeof(v)coder.Type から派生したオブジェクトを作成して、コード生成用に v の型を表します。coder.typeof は、入力パラメーターの型を指定する場合にのみ使用します。関数 codegen-args オプションと併用したり、サンプル コードを提供して入力型を定義する際に MATLAB® Coder™ プロジェクト内でこの関数を使用します。コードの生成元となる MATLAB コード内では、この関数を使用しないでください。

type_obj = coder.typeof(v,sz,variable_dims) では、sz で指定された上限サイズと、variable_dims で指定された可変次元をもつ type_obj = coder.typeof(v) の変更されたコピーが返されます。

type_obj = coder.typeof(type_obj)type_obj 自体を返します。

すべて折りたたむ

double で固定サイズのシンプルな 5x6 行列に対する型を作成します。

coder.typeof(ones(5,6))
ans = 

coder.PrimitiveType
   5×6 double

coder.typeof(0,[5 6])
ans = 

coder.PrimitiveType
   5×6 double

double で可変サイズ行列の型を作成します。

coder.typeof(ones(3,3),[],1)
ans = 

coder.PrimitiveType
   :3×:3 double
% ':' indicates variable-size dimensions

固定サイズの次元と可変サイズの次元をもつ行列の型を作成します。

coder.typeof(0,[2,3,4],[1 0 1])
ans = 

coder.PrimitiveType
   :2×3×:4 double

coder.typeof(10,[1 5],1) 
ans = 

coder.PrimitiveType
   1×:5 double
% ':' indicates variable-size dimensions

最初の次元は制限なし、2 番目の次元は固定サイズ double の行列の型を作成します。

coder.typeof(10,[inf,3]) 
ans = 

coder.PrimitiveType
   :inf×3 double
% ':' indicates variable-size dimensions

最初の次元は制限なし、2 番目の次元は上限サイズが 3 の可変サイズ double の行列の型を作成します。

coder.typeof(10,[inf,3],[0 1]) 
ans = 

coder.PrimitiveType
   :inf×:3 double

固定サイズの行列を可変サイズの行列に変換します。

coder.typeof(ones(5,5),[],1) 
 ans = 

coder.PrimitiveType
   :5×:5 double
% ':' indicates variable-size dimensions

可変サイズ フィールドをもつ構造体の型を作成します。

x.a = coder.typeof(0,[3 5],1);
x.b = magic(3);
coder.typeof(x)
ans = 

coder.StructType
   1×1 struct
      a: :3×:5 double
      b: 3×3 double
% ':' indicates variable-size dimensions

入れ子にされた構造体 (別の構造体のフィールドとなる構造体) を作成します。

S = struct('a',double(0),'b',single(0));
SuperS.x = coder.typeof(S);
SuperS.y = single(0);
coder.typeof(SuperS)  
ans = 

coder.StructType
   1×1 struct
      x: 1×1 struct
         a: 1×1 double
         b: 1×1 single
      y: 1×1 single

構造体の可変サイズ配列をフィールドとして含む構造体を作成します。

S = struct('a',double(0),'b',single(0));
SuperS.x = coder.typeof(S,[1 inf],[0 1]);
SuperS.y = single(0);
coder.typeof(SuperS)
ans = 

coder.StructType
   1×1 struct
      x: 1×:inf struct
         a: 1×1 double
         b: 1×1 single
      y: 1×1 single
% ':' indicates variable-size dimensions

可変サイズ フィールドをもつ同種 cell 配列の型を作成します。

a = coder.typeof(0,[3 5],1);
b = magic(3);
coder.typeof({a b})
ans = 

coder.CellType
   1×2 homogeneous cell 
      base: :3×:5 double
% ':' indicates variable-size dimensions

異種混合 cell 配列の型を作成します。

a = coder.typeof('a');
b = coder.typeof(1);
coder.typeof({a b})
ans = 

coder.CellType
   1×2 heterogeneous cell 
      f1: 1×1 char
      f2: 1×1 double

クラスが同じでサイズが異なる cell 配列から、可変サイズの同種 cell 配列型を作成します。

1. サイズが異なる 2 つの文字ベクトルが含まれる cell 配列の型を作成します。cell 配列型は異種混合になります。

coder.typeof({'aa','bbb'})
ans = 

coder.CellType
   1×2 heterogeneous cell 
      f1: 1×2 char
      f2: 1×3 char

2.同じ cell 配列入力を使用して型を作成します。今度は、可変サイズの次元をもつ cell 配列型を指定します。cell 配列型は同種になります。

coder.typeof({'aa','bbb'},[1,10],[0,1])
ans = 

coder.CellType
   1×:10 locked homogeneous cell 
      base: 1×:3 char
% ':' indicates variable-size dimensions

固定サイズの配列を制限付きの可変サイズ配列に変更します。

値クラス オブジェクトの型を作成します。

1. 次の値クラスを作成します。

classdef mySquare
    properties
        side;
    end
    methods
        function obj = mySquare(val)
            if nargin > 0
                obj.side = val;
            end
        end
        function a = calcarea(obj)
            a = obj.side * obj.side;
        end
    end
end

2.mySquare のオブジェクトを作成します。

sq_obj = coder.typeof(mySquare(4))
sq_obj = 

coder.ClassType
   1×1 mySquare   
      side: 1×1 double

3.sq_obj と同じプロパティをもつオブジェクトの型を作成します。

t = coder.typeof(sq_obj)
t = 

coder.ClassType
   1×1 mySquare   
      side: 1×1 double

あるいは、クラス定義から型を作成することもできます。

t = coder.typeof(mySquare(4))
t = 

coder.ClassType
   1×1 mySquare   
      side: 1×1 double

string スカラーを定義します。次に例を示します。

s = "mystring";

s から型を作成します。

t = coder.typeof(s);

t を可変サイズにするには、tValue プロパティを、必要な上限のある可変サイズの文字ベクトルの型に割り当てます。たとえば、t 型が上限 10 の可変サイズであると指定します。

t.Properties.Value = coder.typeof('a',[1 10],[0 1]);

t が上限なしの可変サイズであると指定するには、次のようにします。

t.Properties.Value = coder.typeof('a',[1 inf]);

-args オプションを使用して、型を codegen に渡します。

codegen myFunction -args {t}

入力引数

すべて折りたたむ

v は MATLAB の数値、論理値、文字、列挙、固定小数点配列にすることができます。v も前述の型を含む cell 配列、構造体、値クラスにすることができます。

v が cell 配列で、クラスが同じでサイズが異なる要素がある場合に可変サイズの次元を指定すると、coder.typeof は同種 cell 配列型を作成します。要素に異なるクラスがある場合、coder.typeof でエラーが報告されます。

例: coder.typeof(ones(5,6));

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | struct | table | cell | function_handle | categorical | datetime | duration | calendarDuration | fi
複素数のサポート: あり

型オブジェクトの各次元を指定するサイズ ベクトル。

sz で次元に inf を指定する場合は、次元のサイズは無限で、次元は可変サイズです。sz[] の場合は、v の上限サイズは変化しません。

サイズが指定されない場合、szv の既定の次元を使用します。

例: coder.typeof(0,[5,6]);

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

各次元のサイズが可変 (true) か、固定 (false) かを指定する論理ベクトル。cell 配列の要素に異なるクラスがある場合、可変サイズの次元は指定できません。

variable_dims 入力パラメーターを指定しないと、この型の制限付き次元は固定になります。

スカラー variable_dims はすべての次元に適用されます。ただし、variable_dims1 の場合、大きさが 1 の次元のサイズは固定されたままになります。

例: coder.typeof(0,[2,3,4],[1 0 1]);

データ型: logical

コード生成のための v の型を表す coder.Type オブジェクト。

例: type_obj = coder.typeof(ones(5,6));

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | struct | table | cell | function_handle | categorical | datetime | duration | calendarDuration | fi
複素数のサポート: あり

出力引数

すべて折りたたむ

コード生成のための v の型を表す coder.Type オブジェクト。

例: type_obj = coder.typeof(ones(5,6));

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | struct | table | cell | function_handle | categorical | datetime | duration | calendarDuration | fi
複素数のサポート: あり

制限

  • スパース行列の場合、coder.typeof は可変サイズの次元の上限を下げます。

ヒント

  • 引数 variable_dims で大きさが 1 の次元が可変サイズであることを明示的に指定していない限り、coder.typeof は大きさが 1 の次元のサイズを固定します。

    たとえば、以下のコードでは 1 行 :10 列の double を指定します。最初の次元 (大きさが 1 の次元) は固定サイズです。2 番目の次元は可変サイズです。

    t = coder.typeof(5,[1 10],1)
    一方、以下のコードでは :1 行 :10 列の double を指定します。どちらの次元も可変サイズになります。
    t = coder.typeof(5,[1 10],[1 1])

    メモ

    MATLAB Function ブロックでは、入力信号または出力信号の大きさが 1 の次元は可変サイズにできません。

  • 関数 type を使用して入力変数の型を既に指定している場合は、サイズも指定する場合を除き coder.typeof を使用しないでください。たとえば、coder.typeof(single(0)) ではなく、構文 single(0) を使用します。

  • cell 配列型の場合、coder.typeof は cell 配列型が同種または異種混合のどちらであるかを判定します。

    cell 配列要素のクラスとサイズが同じ場合、coder.typeof は同種 cell 配列型を返します。

    要素のクラスが異なる場合、coder.typeof は異種混合 cell 配列型を返します。

    一部の cell 配列では、同種であるか異種混合であるかの分類はあいまいです。たとえば、{1 [2 3]} の型は、最初の要素が double で 2 番目の要素が 1 行 2 列の double の、1 行 2 列の異種混合型になります。型に、double のクラスと 1 行 :2 列のサイズをもつ要素の 1 行 3 列の同種型を使用することもできます。このようなあいまいなケースでは、coder.typeof はヒューリスティックな方法を使用して型を同種または異種混合として分類します。異なる分類が必要な場合は、coder.CellType makeHomogeneous または makeHeterogeneous メソッドを使用して必要な分類の型を作成します。makeHomogeneous メソッドは型の同種コピーを作成します。makeHeterogeneous メソッドは型の異種混合コピーを作成します。

    makeHomogeneous メソッドと makeHeterogeneous メソッドは分類を異種混合および同種として永続的に割り当てます。これらのいずれかの方法を後で使用して分類が異なるコピーを作成することはできません。

R2011a で導入