Main Content

C++ 配列用の MATLAB オブジェクト

MATLAB® は、C++ ネイティブ配列および std::vector 型をラップするインターフェイス clib.array を提供しています。用語 "clib 配列" は、これらの C++ 型の MATLAB 表現を指します。

MATLAB の clib 配列は、対応する C++ ネイティブ配列または std::vector が、サポートされる C++ の構成要素 (関数の入力引数、出力引数およびデータ メンバー) によって使用される場合にのみ定義されます。指定されるヘッダーは、要素の型の定義を含まなければなりません。構成要素は、MATLAB でサポートされている必要があり、インターフェイスのビルド時に除外されてはなりません。

C++ オブジェクトの MATLAB 配列の作成

C++ ネイティブ配列または std::vector 型を表す MATLAB オブジェクトを作成するには、関数 MATLABclibArray を呼び出します。たとえば、ライブラリ libname がクラス myclass を定義しているとします。MATLAB で、このクラスを clib.libname.myclass として参照します。5 つの myclass オブジェクトからなる配列を作成するには、次の構文を使用します。

myclassArray = clibArray('clib.libname.myclass',5);

MATLAB 配列 myclassArray の型は clib.array.libname.myclass です。myclassArray の要素にアクセスするには、MATLAB インデックスを使用します。たとえば、最初の要素にアクセスするには、次の構文を使用します。

e = myclassArray(1)

要素の型は clib.libname.myclass です。

あるいは、要素の型が基本型、規定のコンストラクターを持つユーザー定義クラス、あるいは標準 string 型の場合、clib.array コンストラクターを呼び出します。

ユーザー定義クラスについて 5 つの要素からなる配列を作成するには、次のように入力します。

myclassArray = clib.array.libname.myclass(5)

基本型から配列を作成するには、要素の型を知っていなければなりません。詳細については、ベクトル整数型およびC++ から MATLAB へのデータ型のマッピング浮動小数点型の表を参照してください。たとえば、C++ の型が std::vector<int32_t> である場合、MATLAB 要素の型は clib.libname.Int です。5 つの要素をもつ配列を作成するには次のように入力します。

myIntArray = clib.array.libname.Int(5)

標準 string 型から配列を作成するため、std::vector<T> string 型の表を参照して要素の型の情報を調べます。たとえば、C++ の型が std::vector<std::string> である場合、MATLAB 要素の型は clib.libname.std.String です。5 つの要素をもつ配列を作成するには次のように入力します。

myStringArray = clib.array.libname.std.String(5)

メモ

C++ オブジェクトを MAT ファイルに保存することはサポートされていません。

メモ

大かっこを使用して C++ オブジェクトの配列を作成することはできません。

MATLAB 配列から C++ 配列オブジェクトへの変換

既存の MATLAB 配列を C++ 配列オブジェクトとして使用できます。関数 clibConvertArray を呼び出します。

MATLAB の C++ オブジェクト配列のプロパティ

clibArray または clibConvertArray で作成した MATLAB 配列には以下のプロパティがあります。

プロパティ

アクセス

説明

Dimensions

double vector読み取り専用

C++ 配列の次元数

Resizable

logical scalar読み取り専用

  • true — 要素の追加/削除を許可

  • false — 要素の追加/削除を不許可

MATLAB の C++ オブジェクト配列のメソッド

clibArray または clibConvertArray で作成した MATLAB 配列には以下のメソッドがあります。

メソッド

シグネチャ

説明

append

append([element])

オプションで指定された要素を配列の最後に追加します。

プリミティブ型の MATLAB の clib 配列の場合、入力引数がなければゼロ値が追加されます。

クラス型の MATLAB の clib 配列の場合、入力引数がなければクラス型の既定のコンストラクターが追加されます。クラス型の既定のコンストラクターが削除された場合、ランタイム エラーが発生します。

removeLast

removeLast

配列の最後の要素を削除します。MATLAB の clib 配列が空の場合、ランタイム エラーが発生します。

double

double

倍精度に変換します。

int8

int8

int8 に変換します。

uint8

uint8

uint8 に変換します。

int16

int16

int16 に変換します。

uint16

uint16

uint16 に変換します。

int32

int32

int32 に変換します。

uint32

uint32

uint32 に変換します。

int64

int64

int64 に変換します。

uint64

uint64

uint64 に変換します。

logical

logical

数値を logical に変換します。

基本型の C++ ネイティブ配列を MATLAB 基本型として取り扱う

既定の設定では、MATLAB は基本型の C++ ネイティブ配列を MATLAB clib.array 型を使用して表します。基本の MATLAB 配列型を出力で保持する必要がある場合は、ReturnCArrays 引数を false に設定してインターフェイスをビルドします。詳細については、clibgen.generateLibraryDefinition を参照してください。

メモリ管理

clibArray または clibConvertArray で作成された MATLAB 配列のメモリは MATLAB が所有します。このメモリを解放するには、clibRelease を呼び出します。

参考

| |

関連するトピック