Main Content

C++ から MATLAB へのデータ型のマッピング

以下の表に、MATLAB® が C/C++ データを同等の MATLAB データ型にどのように変換するかを示します。MATLAB でのライブラリ定義ファイルの作成時、これらのマッピングが使用されます。MATLAB シグネチャの不足している情報を定義するときは、この情報を使用すると役立ちます。

数値型

スカラー整数型

固定幅の整数データ型のマッピングはプラットフォームおよびコンパイラに依存しません。非固定幅の整数型のマッピングはコンパイラに基づきます。

固定幅の整数型.  これらの型については、DIRECTION"input"SHAPE1 として指定します。

C の固定幅のスカラー整数型対応する MATLAB の型

int8_t

int8

std::complex<int8_t>

複素数の int8

uint8_t

uint8

std::complex<uint8_t>

複素数の uint8

int16_t

int16

std::complex<int16_t>

複素数の int16

uint16_t

uint16

std::complex<uint16_t>

複素数の uint16

int32_t

int32

std::complex<int32_t>

複素数の int32

uint32_t

uint32

std::complex<uint32_t>

複素数の uint32

int64_t

int64

std::complex<int64_t>

複素数の int64

uint64_t

uint64

std::complex<uint64_t>

複素数の uint64

非固定幅の整数型.  MATLAB は以下の非固定幅の C 整数型をサポートしています。使用したコンパイラに基づき、MATLAB は、固定幅の整数型の表に示すように、これらの型を対応する固定幅の C 型にマップします。

  • short

  • short int

  • signed short

  • signed short int

  • unsigned short

  • unsigned short int

  • int

  • signed int

  • unsigned

  • unsigned int

  • long

  • signed long

  • signed long int

  • unsigned long

  • unsigned long int

  • long long

ベクトル整数型

次の表は、MATLAB データ型が std::vector 型にどう対応しているかを示しています。既定では、MATLAB は std::vector 型を MATLAB clib.array 型で表します。詳細については、C++ 配列用の MATLAB オブジェクトを参照してください。

MATLAB は C++ の基本型の名前をアッパー キャメル ケースに変換します。複素数型については、MATLAB は std.complexclib.array 型に追加します。

これらの型については、DIRECTION"input"SHAPE1 として指定します。

C++ の std::vector<T>
パラメーター T
整数型

MATLAB の対応するインターフェイス lib
clib.array

要素の型

std::vector<int8_t>

clib.array.lib.SignedChar

clib.lib.SignedChar

std::vector<std::complex<int8_t>>

clib.array.lib.std.complex.SignedChar

clib.lib.std.complex.SignedChar

std::vector<uint8_t>

clib.array.lib.UnsignedChar

clib.lib.UnsignedChar

std::vector<std::complex<uint8_t>>

clib.array.lib.std.complex.UnsignedChar

clib.lib.std.complex.UnsignedChar

std::vector<int16_t>

clib.array.lib.Short

clib.lib.Short

std::vector<std::complex<int16_t>>

clib.array.lib.std.complex.Short

clib.lib.std.complex.Short

std::vector<uint16_t>

clib.array.lib.UnsignedShort

clib.lib.UnsignedShort

std::vector<std::complex<uint16_t>>

clib.array.lib.std.complex.UnsignedShort

clib.lib.std.complex.UnsignedShort

std::vector<int32_t>

clib.array.lib.Int

clib.lib.Int

std::vector<std::complex<int32_t>>

clib.array.lib.std.complex.Int

clib.lib.std.complex.Int

std::vector<uint32_t>

clib.array.lib.UnsignedInt

clib.lib.UnsignedInt

std::vector<std::complex<uint32_t>>

clib.array.lib.std.complex.UnsignedInt

clib.lib.std.complex.UnsignedInt

std::vector<int64_t>

clib.array.lib.LongLong

clib.lib.LongLong

std::vector<std::complex<int64_t>>

clib.array.lib.std.complex.LongLong

clib.lib.std.complex.LongLong

std::vector<uint64_t>

clib.array.lib.UnsignedLongLong

clib.lib.UnsignedLongLong

std::vector<std::complex<uint64_t>>

clib.array.lib.std.complex.UnsignedLongLong

clib.lib.std.complex.UnsignedLongLong

浮動小数点型

これらの型については、DIRECTION"input"SHAPE1 として指定します。

C 浮動小数点型対応する MATLAB の型

double

double

std::complex<double>

複素数の double

float

single

std::complex<float>

複素数の single

C++ の std::vector<T>
パラメーター T
浮動小数点型

MATLAB の対応するインターフェイス lib
clib.array

要素の型a

std::vector<double>

clib.array.lib.Double

clib.lib.Double

std::vector<std::complex<double>>

clib.array.lib.std.complex.Double

clib.lib.std.complex.Double

std::vector<float>

clib.array.lib.Float

clib.lib.Float

std::vector<std::complex<float>>

clib.array.lib.std.complex.Float

clib.lib.std.complex.Float

a  For information about using element types, see C++ 配列用の MATLAB オブジェクト.

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"SHAPE1 として指定します。

標準の C++ の文字型対応する MATLAB の型

char

int8

signed char

int8

unsigned char

uint8

wchar_t

char

char16_t

char

char32_t

char

標準の C++ の string 型対応する MATLAB の型

std::string

string
(MATLAB は std::string に対するプラットフォームの既定のエンコードに文字を変換します)

std::wstring

string

std::u16string

string

std::u32string

string

C++ の char* 型と char[]

C++ のパラメーターの型MLTYPESHAPE

char*a
const char*

"int8"
"char"
"clib.array.lib.Char"

スカラー値
スカラー値の配列

"string"

"nullTerminated"

char[]
const char[]

"int8"
"char"
"clib.array.lib.Char"

スカラー値

"string"

"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[]
"char"

スカラー値
スカラー値の配列

"string"

"nullTerminated"

a MATLAB sets the DIRECTION of char* parameter types to "input". To define a char* argument as a string output, set DIRECTION to "output" and use the NumElementsInBuffer name-value argument. For an example, see the getMessage function in the Define String Argument table.

C++ の戻り値の型MLTYPESHAPE

char*
const char*

"string" (既定)
文字バッファーを削除するには、関数 defineOutputDeleteFcn 引数を使用して deleter 関数を指定します。

"nullTerminated"

"int8"

スカラー値
スカラー値の配列

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[]

"string" (既定)
文字バッファーを削除するには、関数 defineOutputDeleteFcn 引数を使用して deleter 関数を指定します。

"nullTerminated"

"char"

スカラー値
スカラー値の配列

C++ のデータ メンバーの型対応する MATLAB の型

char*
char[]

string
clib.array.lib.Char
int8
char

wchar_t*
char16_t*
char32_t*

string
char

C++ の string の配列

C++ の string パラメーター型の配列MLTYPESHAPEa

char**
const char**

char*[]
const char*[]

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*[]

"string"

{scalar value,"nullTerminated"}
{parameter name,"nullTerminated"}

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 の型

char*[] および const char*[]
wchar_t*[] および const wchar_t*[]
char16_t*[] および const char16_t*[]
char32_t*[] および const char32_t*[]

string

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 の対応するインターフェイス lib
clib.array

要素の型a

std::vector<std::char>

clib.array.lib.std.Char

clib.lib.std.Char

std::vector<std::string>

clib.array.lib.std.String

clib.lib.std.String

std::vector<std::wstring>

clib.array.lib.std.wString

clib.lib.std.wString

std::vector<std::u16string>

clib.array.lib.std.u16String

clib.lib.std.u16String

std::vector<std::u32string>

clib.array.lib.std.u32String

clib.lib.std.u32String

a  For information about using element types, see C++ 配列用の MATLAB オブジェクト.

bool

これらの型については、DIRECTION"input"SHAPE1 として指定します。

bool対応する MATLAB の型

bool

logical

std::vector<T> bool

MATLAB の対応する libclib.array

要素の型a

bool

clib.array.lib.Bool

clib.lib.Bool

a  For information about using element types, see C++ 配列用の MATLAB オブジェクト.

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 のヘルプでは、p1p2 がプロパティとして表示されます。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.p1
ans = 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) を返します。

ユーザー定義型

Class と Struct の型

次の表に、MATLAB のライブラリ libname に対するインターフェイスの定義ファイルで C++ のパラメーターの型である T を構成する方法を示します。T は class または struct です。

C++ のパラメーターの型

対応する MATLAB の libname の型DIRECTIONSHAPE

T

clib.libname.T

"input"

1

T*clib.libname.T"input"

1

clib.array.libname.T"input"

1
固定次元: 数値配列を入力します ([5,2] など)。
可変次元: パラメーター名の string 配列を入力します (["row","col"] など)。

T[]

clib.array.libname.T

"input"

1
固定次元
可変次元

T&

clib.libname.T

"input"

1

T**

clib.libname.T

"output"

1

std::vector<T>

clib.array.libname.T

"input"

1

std::shared_ptr<T>

clib.libname.T

"input"

1

std::shared_ptr<T>&

clib.array.libname.T

"input"
"inputoutput"

1

次の表に、C++ の戻り値の型である T を構成する方法を示します。

C++ の戻り値の型対応する MATLAB の libname の型SHAPE

T

clib.libname.T

1

T*clib.libname.T

1

clib.array.libname.T

1
固定次元: 数値配列を入力します ([5,2] など)。
可変次元: パラメーター名の string 配列を入力します (["row","col"] など)。

T[]

clib.array.libname.T

1
固定次元
可変次元

T&

clib.libname.T

1

std::vector<T>

clib.array.libname.T

1

std::shared_ptr<T>

clib.libname.T

1

std::shared_ptr<T>&

clib.array.libname.T

1

次の表に、C++ のデータ メンバーの型である T を構成する方法を示します。

C++ のデータ メンバーの型対応する MATLAB の libname の型SHAPE

T

clib.libname.T

1

T*clib.libname.T

1

clib.array.libname.T

1
固定次元: 数値配列を入力します ([5,2] など)。
可変次元: パラメーター名の string 配列を入力します (["row","col"] など)。

T[]

clib.array.libname.T

1
固定次元
可変次元

std::vector<T>

clib.array.libname.T

1

std::shared_ptr<T>

clib.libname.T

1

列挙型

次の表に、MATLAB のライブラリ libname に対するインターフェイスの定義ファイルで C++ の enum 型である T を構成する方法を示します。T は列挙型です。

C++ のパラメーターの型

対応する MATLAB の libname の型DIRECTIONSHAPE
T

clib.libname.T

"input"

1

C++ の戻り値の型対応する MATLAB の libname の型SHAPE
T

clib.libname.T

1

C++ のデータ メンバーの型対応する MATLAB の libname の型SHAPE
T

clib.libname.T

1

nullptr 引数型

nullptr 入力引数型

MATLAB では次の C++ 入力引数型で関数に NULL を渡せるように、clib.type.nullptr 型を提供しています。

  • オブジェクトへのポインター。ただし、基本の MATLAB 配列型へのポインターはサポートされません。

  • shared_ptr

  • Arrays

clib.type.nullptr 型は次の MATLAB 引数の型でサポートされています。

  • スカラーのオブジェクト ポインター

  • clib 配列

nullptr 型の戻り値

C++ インターフェイスは、nullptr を返す関数に対し、型固有の empty 値を返します。

  • double 型の場合、MATLAB は値 double.empty の代わりに [] を返す。

  • その他すべての基本型については、MATLAB は MLTYPE.empty の値を返す。MLTYPE を判定するには、このトピックの表で C または C++ の型を確認します。MLTYPE対応する MATLAB の型の列にあります。

    nullptr 型をテストするには、関数 isempty を呼び出します。

  • 基本型以外の場合、MATLAB は nullptr オブジェクトを返す。nullptr オブジェクトをテストするには、関数 clibIsNull を呼び出します。

void* 引数型

C++ 関数との間での void* 引数の受け渡しについては、void* 引数および void** 引数の定義を参照してください。MATLAB では、void* データ メンバーはサポートされません。

void* 入力引数を渡すとき、MATLAB は基となるデータを対応する C++ 型に変換します。

基本型のマッピング

C++ の型

対応する MATLAB の void*

int8_t*

int8

uint8_t*

uint8

int16_t*

int16

uint16_t*

uint16

int32_t*

int32

uint32_t*

uint32

int64_t*

int64

uint64_t*

uint64

float*

single

double*

double

bool*

logical

clib.array 型のマッピング

C++ の型

MATLAB の対応する clib.arraya (libname)

char*

clib.array.libname.Char

signed char*

clib.array.libname.SignedChar

unsigned char*

clib.array.libname.UnsignedChar

short*

clib.array.libname.Short

unsigned short*

clib.array.libname.UnsignedShort

int*

clib.array.libname.Int

unsigned int*

clib.array.libname.UnsignedInt

long*

clib.array.libname.Long

unsigned long*

clib.array.libname.UnsignedLong

long long*

clib.array.libname.LongLong

unsigned long long*

clib.array.libname.UnsignedLongLong

float*

clib.array.libname.Float

double*

clib.array.libname.Double

bool*

clib.array.libname.Bool

a MATLAB converts the names of fundamental C++ types to upper camel case.

typedef void* のマッピング

C++ の型

対応する MATLAB の libname の型

typedef void* Handleclib.libname.Handle

サポートされていないデータ型

クラス コンストラクター、メソッドまたは関数に含まれる引数/戻り値の型のデータ型が次のいずれかの型である場合、またはライブラリにサポートされていない言語機能が含まれている場合、この機能はライブラリに対する 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 関数を渡すこともできません。

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

  • union

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

    • std::string

    • std::wstring

    • std::u16string

    • std::u32string

    • std::vector

    • std::shared_ptr

    • std::function

    • std::complex

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

MATLAB はサポートされていない型を使用する構成要素についてレポートします。これらのメッセージを表示するには、関数 clibgen.generateLibraryDefinition または関数 clibgen.buildInterfaceVerbose オプションを使用します。

たとえば、ClassName 内の functionNameHeaderFile.h で定義されるとします。functionName の引数が、サポートされていない type 型の場合、MATLAB は定義ファイルに functionName を追加しません。さらに、Verbosetrue の場合、clibgen.generateLibraryDefinition は次のメッセージを表示します。

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

参考

| |

関連するトピック