Main Content

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 オブジェクトを参照してください。

参考

| | | |

関連するトピック