C++ から MATLAB へのデータ型のマッピング
以下の表に、MATLAB® が C/C++ データを同等の MATLAB データ型にどのように変換するかを示します。MATLAB でのライブラリ定義ファイルの作成時、これらのマッピングが使用されます。MATLAB シグネチャの不足している情報を定義するときは、この情報を使用すると役立ちます。
数値型
スカラー整数型
固定幅の整数データ型のマッピングはプラットフォームおよびコンパイラに依存しません。非固定幅の整数型のマッピングはコンパイラに基づきます。
固定幅の整数型. これらの型については、DIRECTION を "input"、SHAPE を 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 型で表します。詳細については、Pass clib.array to C++ Functionsを参照してください。
MATLAB は C++ の基本型の名前をアッパー キャメル ケースに変換します。複素数型については、MATLAB は std.complex を clib.array 型に追加します。
これらの型については、DIRECTION を "input"、SHAPE を 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"、SHAPE を 1 として指定します。
| C 浮動小数点型 | 対応する MATLAB の型 |
|---|---|
|
|
| 複素数の |
|
|
| 複素数の |
C++ の std::vector<T> のパラメーター T の浮動小数点型 | MATLAB の対応するインターフェイス | 要素の型a |
|---|---|---|
|
| clib. |
|
| clib. |
|
| clib. |
|
| clib. |
a For information about using element types, see Pass clib.array to C++ Functions. | ||
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"、SHAPE を 1 として指定します。
| 標準の C++ の文字型 | 対応する MATLAB の型 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
| 標準の C++ の string 型 | 対応する MATLAB の型 |
|---|---|
|
|
|
|
std::u16string |
|
std::u32string |
|
C++ の char* 型と char[] 型
| C++ のパラメーターの型 | MLTYPE | SHAPE |
|---|---|---|
|
| スカラー値 |
|
| |
|
| スカラー値 |
|
| |
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++ の戻り値の型 | MLTYPE | SHAPE |
|---|---|---|
|
| "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[] |
| "nullTerminated" |
| スカラー値 |
| C++ のデータ メンバーの型 | 対応する MATLAB の型 |
|---|---|
|
|
|
|
C++ の string の配列
| C++ の string パラメーター型の配列 | MLTYPE | SHAPEa |
|---|---|---|
| "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 Pass clib.array to C++ Functions. | ||
bool 型
これらの型については、DIRECTION を "input"、SHAPE を 1 として指定します。
bool 型 | 対応する MATLAB の型 |
|---|---|
|
|
| MATLAB の対応する | 要素の型a |
|---|---|---|
|
|
|
a For information about using element types, see Pass clib.array to C++ Functions. | ||
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
SHAPE の引数での static プロパティの使用の詳細については、Use Property or Method as SHAPEを参照してください。
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 内の MLTYPE | DIRECTION | SHAPE |
|---|---|---|---|
|
| "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 内の MLTYPE | SHAPE |
|---|---|---|
|
| 1 |
T* | "clib. | 1 |
"clib.array. | 1 | |
|
| 1 |
|
| 1 |
|
| 1 |
|
| 1 |
|
| 1 |
次の表に、C++ のデータ メンバーの型である T を構成する方法を示します。T はクラスです。
| C++ のデータ メンバーの型 | libname 内の MLTYPE | SHAPE |
|---|---|---|
|
| 1 |
T* | "clib. | 1 |
"clib.array. | 1 | |
|
| 1 |
|
| 1 |
|
| 1 |
struct 型
状況によっては、MATLAB struct 配列を C++ 構造体配列引数として渡すことができます。詳細については、サポートされている struct 型を参照してください。
次の表に、ライブラリ libname への MATLAB インターフェイスの定義ファイルで C++ struct パラメーターの型である S を構成する方法を示します。MLTYPE を "struct" に設定すると、C++ 関数との間で MATLAB 構造体を直接受け渡すことができます。C/C++ 構造体の入力パラメーターで MATLAB struct 関数を呼び出す必要はありません。 (R2025a 以降)
C++ のパラメーターの型 | libname 内の MLTYPE | DIRECTION | SHAPE |
|---|---|---|---|
|
| "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++ struct の戻り値の型である S を構成する方法を示します。
| C++ の戻り値の型 | libname 内の MLTYPE | SHAPE |
|---|---|---|
|
| 1 |
S* | "struct""clib. | 1 |
"struct""clib.array. | 1 | |
|
| 1 |
|
| 1 |
|
| 1 |
|
| 1 |
次の表に、C++ struct のデータ メンバーの型である S を構成する方法を示します。C++ のデータ メンバーの型では、MLTYPE を "struct" に設定することはサポートされていません。
| C++ のデータ メンバーの型 | libname 内の MLTYPE | SHAPE |
|---|---|---|
|
| 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++ の enum 型である T を構成する方法を示します。T は列挙型です。
C++ のパラメーターの型 | libname 内の MLTYPE | DIRECTION | SHAPE |
|---|---|---|---|
T |
| "input" | 1 |
| C++ の戻り値の型 | libname 内の MLTYPE | SHAPE |
|---|---|---|
T |
| 1 |
| C++ のデータ メンバーの型 | libname 内の MLTYPE | SHAPE |
|---|---|---|
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 は
の値を返す。MLTYPE.emptyMLTYPEを判定するには、このトピックの表で C または C++ の型を確認します。MLTYPEは対応する 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.
参考
clibgen.generateLibraryDefinition | clibgen.buildInterface | clibIsReadOnly