このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
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.buildInterface
で Verbose
オプションを使用します。
サポートされていない言語機能
move
コンストラクターオーバーロードされた演算子関数
名前のない名前空間とクラス
プリプロセッサ命令 (マクロ)
グローバル変数
可変個引数関数
インスタンス化の不完全な、またはインスタンス化のない関数テンプレート
std
名前空間でのクラスのオブジェクトの作成 (カスタム クラスを含む)スマート ポインターのセマンティクス。
std::shared_ptr
のみがサポートされます。MATLAB はスマート ポインターのクラス定義において、有効性が制限され得る演算子のオーバーロード、移動セマンティクス、およびメンバー関数をサポートしません。代わりに、std::shared_ptr<T>
が MATLAB でタイプT
として動作します。タイプT
はstd::shared_ptr<T>
の入力として渡すことができ、タイプT
はstd::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 < b | lt(a,b) |
a > b | gt(a,b) |
a <= b | le(a,b) |
a >= b | ge(a,b) |
a ~= b | ne(a,b) |
a == b | eq(a,b) |
a(s1,s2,...,sn) | subsref(a,s) |
a(s1,...,sn) = b | subsassign(a,s,b) |
b(a) | subsindex(a) |