C++ から MATLAB へのデータ型のマッピング
R2026b以下の表に、MATLAB® が C/C++ データを同等の MATLAB データ型にどのように変換するかを示します。MATLAB でのライブラリ定義ファイルの作成時、これらのマッピングが使用されます。MATLAB シグネチャの不足している情報を定義するときは、この情報を使用すると役立ちます。
数値型
スカラー整数型
固定幅の整数データ型のマッピングはプラットフォームおよびコンパイラに依存しません。非固定幅の整数型のマッピングはコンパイラに基づきます。
固定幅の整数型. これらの型については、Direction を "input"、Size を 1 として指定します。
| C の固定幅のスカラー整数型 | 対応する MATLAB の型 |
|---|---|
|
|
| 複素数の |
|
|
| 複素数の |
|
|
| 複素数の |
|
|
| 複素数の |
|
|
| 複素数の |
|
|
| 複素数の |
|
|
| 複素数の |
|
|
| 複素数の |
非固定幅の整数型. MATLAB は以下の非固定幅の C 整数型をサポートしています。使用したコンパイラに基づき、MATLAB は、固定幅の整数型の表に示すように、これらの型を対応する固定幅の C 型にマップします。
shortshort intsigned shortsigned short intunsigned shortunsigned short intintsigned intunsignedunsigned intlongsigned longsigned long intunsigned longunsigned long intlong long
ベクトル整数型
次の表は、MATLAB データ型が std::vector 型にどう対応しているかを示しています。既定では、MATLAB は std::vector 型を MATLAB clib.array 型で表します。詳細については、C++ 関数への clib.array の引き渡しを参照してください。
MATLAB は C++ の基本型の名前をアッパー キャメル ケースに変換します。複素数型については、MATLAB は std.complex を clib.array 型に追加します。
これらの型については、Direction を "input"、Size を 1 として指定します。
C++ の std::vector<T> のパラメーター T の整数型 | MATLAB の対応するインターフェイス | 要素の型 |
|---|---|---|
|
| clib. |
|
| clib. |
|
| clib. |
|
| clib. |
|
| clib. |
|
| clib. |
|
| clib. |
|
| clib. |
|
| clib. |
|
| clib. |
|
| clib. |
|
| clib. |
|
| clib. |
|
| clib. |
|
| clib. |
|
| clib. |
浮動小数点型
これらの型については、Direction を "input"、Size を 1 として指定します。
| C 浮動小数点型 | 対応する MATLAB の型 |
|---|---|
|
|
| 複素数の |
|
|
| 複素数の |
C++ の std::vector<T> のパラメーター T の浮動小数点型 | MATLAB の対応するインターフェイス | 要素の型a |
|---|---|---|
|
| clib. |
|
| clib. |
|
| clib. |
|
| clib. |
a For information about using element types, see C++ 関数への clib.array の引き渡し. | ||
String 型と文字型
以下の表に、C++ の string および char データ型が MATLAB データ型にどう対応しているかを示します。データのマッピングは、関数で型をパラメーター、戻り値の型、データ メンバー (プロパティ) のいずれとして使用するかによって異なります。たとえば、次の関数定義では T 型をそれぞれ異なる方法で使用しています。
void fcn(T); // T is a parameter type (MATLAB input argument)
T fcn(); // T is a return type (MATLAB output argument)標準の C++ の文字型と string 型
これらの型については、Direction を "input"、Size を 1 として指定します。
| 標準の C++ の文字型 | 対応する MATLAB の型 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
| 標準の C++ の string 型 | 対応する MATLAB の型 |
|---|---|
|
|
|
|
std::u16string |
|
std::u32string |
|
C++ の char* 型と char[] 型
| C++ のパラメーターの型 | MATLABType | Size |
|---|---|---|
|
| スカラー値 |
|
| |
|
| スカラー値 |
|
| |
wchar_t* const wchar_t*wchar_t[] const wchar_t[]char16_t* const char16_t*char16_t[] const char16_t[]char32_t* const char32_t*char32_t[] const char32_t[] | "char" | スカラー値 |
|
| |
a MATLAB sets the | ||
| C++ の戻り値の型 | MATLABType | Size |
|---|---|---|
|
R2026b より前: 文字バッファーを削除するには、 | "nullTerminated" |
| スカラー値 | |
wchar_t* const wchar_t*wchar_t[] const wchar_t[]char16_t* const char16_t*char16_t[] const char16_t[]char32_t* const char32_t*char32_t[] const char32_t[] |
R2026b より前: 文字バッファーを削除するには、 | "nullTerminated" |
| スカラー値 |
| C++ のデータ メンバーの型 | 対応する MATLAB の型 |
|---|---|
|
|
|
|
C++ の string の配列
| C++ の string パラメーター型の配列 | MATLABType | Sizea |
|---|---|---|
| "string" | {scalar value, |
a 1D array of string. The first element is the size of array and the last element is the shape of each element. | ||
| C++ の string データ メンバー型の配列 | 対応する MATLAB の型 |
|---|---|
|
|
MATLAB は、次の const および非 const の C++ 戻り値の型をサポートしていません。
char**およびchar*[]wchar_t**およびwchar_t*[]char16_t**およびchar16_t*[]char32_t**およびchar32_t*[]
std::vector<T> string 型
これらの型については、Direction を "input" として指定します。
C++ の std::vector<T> string 型 | MATLAB の対応するインターフェイス | 要素の型a |
|---|---|---|
|
| clib. |
|
| clib. |
|
| clib. |
|
| clib. |
|
| clib. |
a For information about using element types, see C++ 関数への clib.array の引き渡し. | ||
bool 型
これらの型については、Direction を "input"、Size を 1 として指定します。
bool 型 | 対応する MATLAB の型 |
|---|---|
|
|
| MATLAB の対応する | 要素の型a |
|---|---|---|
|
|
|
a For information about using element types, see C++ 関数への clib.array の引き渡し. | ||
Static データ メンバー
public static および public const static データ メンバーは、MATLAB では読み取り専用プロパティとして扱われます。static データ メンバーの値を更新することはできません。たとえば、次のヘッダー ファイルに対するインターフェイス lib を作成します。
class Set
{
public:
static int p1;
const static int p2;
};
int Set::p1 = 5;
const int Set::p2 = 10;clib.lib.Set のヘルプでは、p1 と p2 がプロパティとして表示されます。MATLAB でプロパティを使用するには、次のようにします。
res = clib.lib.Set.p1 + clib.lib.Set.p2
res = 15
クラスの名前を使用して static プロパティを更新しないでください。その場合、MATLAB で clib という名前の構造体が作成されます。インターフェイスで関数を呼び出す前に、clib 構造体を手動でクリアしなければなりません。たとえば、static プロパティ p1 を更新しようとすると、clib は変数になります。
clib.lib.Set.p1 = 20
clib =
lib: [1×1 struct]
clib.lib のコマンドを呼び出す前に変数をクリアします。
clear clib
clib.lib.Set.p1ans = 5
Size の引数での static プロパティの使用の詳細については、Use Property or Method as Sizeを参照してください。
const 型
MATLAB は、C++ 読み取り専用クラスのオブジェクトを const オブジェクトとして扱います。オブジェクトの名前は C++ クラス名であり、MATLAB は "読み取り専用" テキストをオブジェクト表示に追加します。たとえば、次のライブラリ MyClass への MATLAB インターフェイスを作成します。
const class MyClass
{
public:
int val1;
int val2;
};
const MyClass& func(); MATLAB で関数 func を呼び出して const MyClass オブジェクトを作成します。
res = clib.MyClass.func()
res = read-only MyClass with properties: val1: 1 val2: 2
オブジェクトが const かどうかを確認するには、clibIsReadOnly を呼び出します。
clibIsReadOnly(res)
ans = logical 1
オブジェクトが読み取り専用の場合、関数は logical 1 (true) を返します。その他の場合は logical 0 (false) を返します。
ユーザー定義型
クラスの型
次の表に、ライブラリ libname への MATLAB インターフェイスの定義ファイルで C++ パラメーターの型である T を構成する方法を示します。T はクラスです。
C++ のパラメーターの型 | libname 内の MATLABType | Direction | Size |
|---|---|---|---|
|
| "input" | 1 |
T* | "clib. | "input" | 1 |
"clib.array. | "input" | 1 | |
|
| "input" | 1 |
T& |
| "input" | 1 |
|
| "output" | 1 |
|
| "input" | 1 |
|
| "input" | 1 |
|
| "input""inputoutput" | 1 |
次の表に、C++ の戻り値の型である T を構成する方法を示します。T はクラスです。
| C++ の戻り値の型 | libname 内の MATLABType | Size |
|---|---|---|
|
| 1 |
T* | "clib. | 1 |
"clib.array. | 1 | |
|
| 1 |
|
| 1 |
|
| 1 |
|
| 1 |
|
| 1 |
次の表に、C++ のデータ メンバーの型である T を構成する方法を示します。T はクラスです。
| C++ のデータ メンバーの型 | libname 内の MATLABType | Size |
|---|---|---|
|
| 1 |
T* | "clib. | 1 |
"clib.array. | 1 | |
|
| 1 |
|
| 1 |
|
| 1 |
構造体の型
状況によっては、MATLAB 構造体配列を C++ 構造体配列引数として渡すことができます。詳細については、サポートされている struct 型を参照してください。
次の表に、ライブラリ libname への MATLAB インターフェイスの定義ファイルで C++ 構造体パラメーターの型である S を構成する方法を示します。MATLABType を "struct" に設定すると、C++ 関数との間で MATLAB 構造体を直接受け渡すことができます。C/C++ 構造体の入力パラメーターで MATLAB struct 関数を呼び出す必要はありません。 (R2025a 以降)
C++ のパラメーターの型 | libname 内の MATLABType | Direction | Size |
|---|---|---|---|
|
| "input" | 1 |
S* | "clib. | "input" | 1 |
"clib.array. | "input" | 1 | |
"struct" | "input""inputoutput""output" | ||
|
| "input" | 1 |
"struct" | "input""inputoutput" | ||
S& |
| "input" | 1 |
"struct" | "input""inputoutput" | ||
|
| "output" | 1 |
|
| "input" | 1 |
|
| "input" | 1 |
"struct" | "input""inputoutput" | ||
|
| "input" | 1 |
| "clib."struct" | "input""inputoutput" | 1 |
次の表に、C++ 構造体の戻り値の型である S を構成する方法を示します。
| C++ の戻り値の型 | libname 内の MATLABType | Size |
|---|---|---|
|
| 1 |
S* | "struct""clib. | 1 |
"struct""clib.array. | 1 | |
|
| 1 |
|
| 1 |
|
| 1 |
|
| 1 |
次の表に、C++ 構造体のデータ メンバーの型である S を構成する方法を示します。C++ のデータ メンバーの型では、MATLABType を "struct" に設定することはサポートされていません。
| C++ のデータ メンバーの型 | libname 内の MATLABType | Size |
|---|---|---|
|
| 1 |
S* | "clib. | 1 |
"clib.array. | 1 | |
|
| 1 |
|
| 1 |
|
| 1 |
サポートされている struct 型
R2024b 以降
MATLAB では、次の条件を満たす C++ 構造体 (入れ子にされた構造体を含む) がサポートされています。
公開されている基本データ メンバーと非基本データ メンバーが含まれている。
配列データ メンバーは完全に定義されている必要がある。
データ メンバー名は有効な MATLAB 名でなければならない。
構造体に以下は含まれません。
コンストラクター
デストラクター
コピー コンストラクター
代入演算子
constメンバー静的メンバー初期化子
基底クラス
バーチャル メソッド
内部クラス
匿名内部構造体
共用体
既定値をもつデータ メンバー
循環参照をもつ構造体
MATLAB 構造体を C++ struct 引数として渡す方法については、Pass struct Parameterを参照してください。
列挙型
次の表に、MATLAB のライブラリ libname に対するインターフェイスの定義ファイルで C++ 列挙型である T を構成する方法を示します。T は列挙型です。
C++ のパラメーターの型 | libname 内の MATLABType | Direction | Size |
|---|---|---|---|
T |
| "input" | 1 |
| C++ の戻り値の型 | libname 内の MATLABType | Size |
|---|---|---|
T |
| 1 |
| C++ のデータ メンバーの型 | libname 内の MATLABType | Size |
|---|---|---|
T |
| 1 |
nullptr 引数型
nullptr 入力引数型
MATLAB では次の C++ 入力引数型で関数に NULL を渡せるように、clib.type.nullptr 型を提供しています。
オブジェクトへのポインター。ただし、基本の MATLAB 配列型へのポインターはサポートされません。
shared_ptrArrays
clib.type.nullptr 型は次の MATLAB 引数の型でサポートされています。
スカラーのオブジェクト ポインター
clib配列
nullptr 型の戻り値
C++ インターフェイスは、nullptr を返す関数に対し、型固有の empty 値を返します。
double型の場合、MATLAB は値double.emptyの代わりに[]を返す。その他すべての基本型については、MATLAB は
の値を返す。MATLABType.emptyMATLABTypeを判定するには、このトピックの表で C または C++ の型を確認します。MATLABTypeは対応する MATLAB の型の列にあります。nullptr型をテストするには、関数isemptyを呼び出します。基本型以外の場合、MATLAB は
nullptrオブジェクトを返す。nullptrオブジェクトをテストするには、関数clibIsNullを呼び出します。
void* 引数型
C++ 関数との間での void* 引数の受け渡しについては、void* 引数および void** 引数の定義を参照してください。MATLAB では、void* データ メンバーはサポートされません。
void* 入力引数を渡すとき、MATLAB は基となるデータを対応する C++ 型に変換します。
基本型のマッピング
| C++ の型 | 対応する MATLAB の |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
clib.array 型のマッピング
| C++ の型 | 対応する MATLAB の |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
a MATLAB converts the names of fundamental C++ types to upper camel case. | |
typedef void* のマッピング
| C++ の型 | 対応する MATLAB の |
|---|---|
typedef void* | clib. |
サポートされていないデータ型
クラス コンストラクター、メソッドまたは関数に含まれる引数/戻り値の型のデータ型が次のいずれかの型である場合、またはライブラリにサポートされていない言語機能が含まれている場合、MATLAB はその機能をライブラリに対するインターフェイスに含めません。
サイズが 64 ビットより大きいすべての型 (
long doubleなど)ポインターへの参照 (例:
int*&)std::stringのポインターまたは配列列挙型へのポインターまたは参照
クラス オブジェクトへのポインターのベクトル (
std::vector<Myclass*>など)参照データ メンバー
void*データ メンバー多次元データ メンバーの配列
static データ メンバーの変更
**ポインター。ただし、次の例外があります。MATLAB は、
char**型をサポートします。MATLAB は、関数またはメソッド パラメーターのタイプとして使用されるカスタム クラスへの
**ポインターをサポートします。MATLAB は、関数またはメソッド パラメーターのタイプとして使用される
void**をサポートします。
マルチレベル ポインター (
など)type***C 関数ポインター、および関数の戻り値の型またはデータ メンバーとしての
std::function。また、C 関数ポインターへの入力、またはstd::functionパラメーターとして MATLAB 関数を渡すこともできません。インスタンス化の不完全な、またはインスタンス化のないクラス テンプレート
unionstd名前空間で定義される型。ただし、サポートされている次の型は除きます。std::stringstd::wstringstd::u16stringstd::u32stringstd::vectorstd::shared_ptrstd::functionstd::complex
サポートされていない型についてのメッセージ
MATLAB はサポートされていない型を使用する構成要素についてレポートします。これらのメッセージを表示するには、clibgen.generateLibraryDefinition 関数または clibgen.buildInterface 関数で Verbose オプションを使用します。
たとえば、ClassName 内の functionName が HeaderFile.h で定義されるとします。functionName の引数が、サポートされていない type 型の場合、MATLAB は定義ファイルに functionName を追加しません。さらに、Verbose が true の場合、clibgen.generateLibraryDefinition は次のメッセージを表示します。
Did not add member 'functionName' to class 'ClassName' at HeaderFile.h:290. 'type' is not a supported type.