MEX 関数のデータを渡すためのデータ型
MATLAB® データ API は、MEX 関数が特定のデータ型を MATLAB との間で受け渡すことができる配列型をサポートしています。追加の配列型の詳細については、C++ 用の MATLAB データ APIを参照してください。
最も一般的な配列型は matlab::data::Array
です。より特殊な型は追加の機能を提供します。たとえば、matlab::data::TypedArray<T>
は反復子のサポートを提供し、matlab::data::CharArray
は ASCII 型と UTF16 型の変換を提供します。
以下の各節は、MATLAB データ API を使用して入出力の型を定義する方法を示します。次に示すクラス定義によって定義される入力と出力をもつ MEX フレームワークがあるとします。matlab::data::ArrayFactory
を使用して出力配列を作成します。
class MexFunction : public matlab::mex::Function {
public:
void operator()(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs) {
matlab::data::ArrayFactory factory;
...
}
型付き配列
matlab::data::TypedArray<T>
を使用して、数値や logical 値などの具体的な型を定義します。たとえば、MATLAB から myMexFcn
を呼び出します。
m = [-2 2 6 8]; result = myMexFcn(m);
MEX 関数に MATLAB double
型の入力を代入します。
matlab::data::TypedArray<double> doubleArray = inputs[0];
MATLAB で double
型になる出力を返します。
outputs[0] = factory.createArray<double>({ 1,4 }, { -2.0, 2.0, 6.0, 8.0 });
文字配列
matlab::data::CharArray
を使用して、文字配列を MEX 関数との間で受け渡します。たとえば、文字ベクトルを指定して MATLAB から myMexFcn
を呼び出します。
result = myMexFcn('Character vector');
MEX 関数に MATLAB char
型の入力を代入します。
matlab::data::CharArray charVector2 = inputs[0];
MATLAB で char
型になる出力を返します。
outputs[0] = factory.createCharArray("Character vector");
string 配列
matlab::data::TypedArray<MATLABString>
を使用して、string 配列を MEX 関数との間で受け渡します。たとえば、string 配列を指定して MATLAB から myMexFcn
を呼び出します。
result = myMexFcn(["Array", "of", "strings"]);
MEX 関数に MATLAB string
型の入力を代入します。
matlab::data::TypedArray<matlab::data::MATLABString> stringArray = inputs[0];
MATLAB で string
型になる出力を返します。
outputs[0] = factory.createArray({ 1,3 }, { u"Array", u"of", u"strings" });
cell 配列
matlab::data::CellArray
を使用して、MEX 関数との間で cell 配列を受け渡します。たとえば、cell 配列を指定して MATLAB から myMexFcn
を呼び出します。
result = myMexFcn({'MATLAB cell array', [1.2 2.2; 3.2 4.2]});
MEX 関数に MATLAB cell
型の入力を代入します。
matlab::data::CellArray inCellArray2 = inputs[0];
MATLAB で cell
型になる出力を返します。
outputs[0] = factory.createCellArray({ 1,2 },
factory.createCharArray("MATLAB Cell Array"),
factory.createArray<double>({ 2,2 }, { 1.2, 3.2, 2.2, 4.2 }));
2 次元配列を定義する際には、C++ と MATLAB の間に行優先の順序と列優先の順序の違いがあることに注意してください。
構造体配列
matlab::data::StructArray
を使用して、構造体を MEX 関数との間で受け渡します。たとえば、構造体を指定して MATLAB から myMexFcn
を呼び出します。
st.Name = 'Color';
st.Value = uint8([1 0 1]);
result = myMexFcn(st);
MEX 関数に MATLAB struct
型の入力を代入します。
matlab::data::StructArray inStructArray = inputs[0];
MATLAB で struct
型になる出力を返します。
matlab::data::StructArray S = factory.createStructArray({ 1,1 }, { "Name","Value" });
S[0]["Name"] = factory.createCharArray("Color");
S[0]["Value"] = factory.createArray<uint8_t>({ 1, 3 }, { 1, 0, 1 });
outputs[0] = S;
MATLAB オブジェクト
matlab::data::Array
を使用して、MEX 関数との間でオブジェクトの受け渡しをします。たとえば、MyClass
という名前のユーザー定義クラスのオブジェクトを指定して、MATLAB から myMexFcn
を呼び出します。
classdef MyClass property MeanValue = 0.5 end end
obj = MyClass;
MEX 関数に MATLAB MyClass
型の入力を代入します。
matlab::data::Array obj = inputs[0];
MyClass
が、double
型のスカラーが格納された MeanValue
というプロパティを定義しているとします。getPropertyを使用してプロパティの値を取得します。
matlab::data::TypedArray<double> meanValue = matlabPtr->getProperty(obj, u"MeanValue");
double m = meanValue[0];
setPropertyを使用してプロパティの値を設定してから、オブジェクトを matlab::data::Array
として MATLAB に返します。
matlabPtr->setProperty(obj, u"MeanValue", factory.createScalar<double>(1.02));
outputs[0] = obj;
MATLAB オブジェクトで作業する方法の例については、MEX 関数の MATLAB オブジェクトを参照してください。
参考
double
| char
| string
| cell
| struct