Main Content

C/C++ サポートに関する制限

C++98 機能およびよく使用される C++11 機能に基づく 64 ビットのコンパイル済みライブラリに対し、MATLAB® インターフェイスを作成することができます。ただし、ライブラリに以下のデータ型または言語機能が含まれている場合、この機能はライブラリに対する MATLAB インターフェイスに含められません。ラッパー ヘッダー ファイルを作成することにより、この機能を含めることができる場合があります。詳細については、C++ の制限を回避する例を参照してください。

未サポートのデータ型

  • サイズが 64 ビットより大きいすべての型 (long double など)

  • ポインターへの参照 (例: int*&)

  • std::string のポインターまたは配列

  • 列挙型へのポインターまたは参照

  • クラス オブジェクトへのポインターのベクトル (std::vector<Myclass*> など)

  • 参照データ メンバー

  • void* データ メンバー

  • 多次元データ メンバーの配列

  • static データ メンバーの変更

  • ** ポインター。ただし、次の例外があります。

    • MATLAB は、char** 型をサポートします。

    • MATLAB は、関数またはメソッド パラメーターのタイプとして使用されるカスタム クラスへの ** ポインターをサポートします。

    • MATLAB は、関数またはメソッド パラメーターのタイプとして使用される void** をサポートします。

  • マルチレベル ポインター (type*** など)

  • C 関数ポインター、および関数の戻り値の型またはデータ メンバーとしての std::function 。また、C 関数ポインターへの入力、または std::function パラメーターとして MATLAB 関数を渡すこともできません。

  • インスタンス化の不完全な、またはインスタンス化のないクラス テンプレート

  • union

  • std 名前空間で定義される型。ただし、サポートされている次の型は除きます。

    • std::string

    • std::wstring

    • std::u16string

    • std::u32string

    • std::vector

    • std::shared_ptr

    • std::function

    • std::complex

サポートされていない型についてのメッセージ

ライブラリでこれらのデータ型が使用されている場合、ライブラリに対する MATLAB インターフェイスにその機能は含まれず、MATLAB は以下のようなメッセージを表示します。

Did not add member 'methodName' to class 'ClassName' at HeaderFile.h:290.
  'long double' is not a supported type.

これらのメッセージを表示するには、関数 clibgen.generateLibraryDefinition または関数 clibgen.buildInterfaceVerbose オプションを使用します。

サポートされていない言語機能

  • move コンストラクター

  • オーバーロードされた演算子関数

  • 名前のない名前空間とクラス

  • プリプロセッサ命令 (マクロ)

  • グローバル変数

  • 可変個引数関数

  • インスタンス化の不完全な、またはインスタンス化のない関数テンプレート

  • std 名前空間でのクラスのオブジェクトの作成 (カスタム クラスを含む)

  • スマート ポインターのセマンティクス。std::shared_ptr のみがサポートされます。MATLAB はスマート ポインターのクラス定義において、有効性が制限され得る演算子のオーバーロード、移動セマンティクス、およびメンバー関数をサポートしません。代わりに、std::shared_ptr<T> が MATLAB でタイプ T として動作します。タイプ Tstd::shared_ptr<T> の入力として渡すことができ、タイプ Tstd::shared_ptr<T> の出力として受け取られます。

  • 名前空間のエイリアス。代わりに元の名前空間の名前を使用します。

これらの機能または使用を含むライブラリをビルドすると、MATLAB は次を表示します。

Warning: Some C++ language constructs in the header file are not supported and not imported.

メモ

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

MATLAB での C++ クラスの継承

MATLAB では、C++ インターフェイス クラスを継承する MATLAB クラスの作成はサポートされていません。

サポートされていないクラス メソッド

MATLAB では、次の関連する関数を定義することによる演算子の実装はサポートされていません。

演算

定義するメソッド

a < blt(a,b)
a > bgt(a,b)
a <= ble(a,b)
a >= bge(a,b)
a ~= bne(a,b)
a == beq(a,b)
a(s1,s2,...,sn)subsref(a,s)
a(s1,...,sn) = bsubsassign(a,s,b)
b(a)subsindex(a)

関連するトピック