MEX 関数からの MATLAB 関数の呼び出し
関数fevalを使用して、MEX 関数から MATLAB® 関数を呼び出します。feval
を使用すると、MEX 関数から MATLAB 関数に引数を渡し、結果を MEX 関数に返すことができます。
次のコード スニペットでは、matlab::data::ArrayFactory
とmatlab::engine::MATLABEngine
を使用するために、次の定義が必要です。
matlab::data::ArrayFactory factory; std::shared_ptr<matlab::engine::MATLABEngine> matlabPtr = getEngine();
単一の出力
この例では、次の入力を指定して MATLAB 関数 sqrt
を呼び出します。
UTF16 文字列として渡される関数名
関数
sqrt
への入力。matlab::data::Array
として指定します。
MEX 関数に返される値は、入力配列の各要素の平方根が格納された 4 要素の matlab::data::Array
です。
この例では、戻り値を matlab::data::TypedArray
に移動します。そこでは、MATLAB 関数 sqrt
によって返される結果から double
型の配列を作成する、範囲ベースの for
ループで使用される反復子が提供されます。
// Define input and output arguments matlab::data::Array args({ factory.createArray<double>({ 1, 4 },{ 1, 2, 3, 4 }) }); matlab::data::Array result; // Call feval and return 1 argument result = matlabPtr->feval(u"sqrt", args); matlab::data::TypedArray<double> returnedValues(std::move(result)); // Create native array double dataArray[4]; int i = 0; for (auto elem : returnedValues) { dataArray[i] = elem; i++; }
複数の出力
一部の MATLAB 関数は、関数をどのように呼び出すかによって異なる数の出力を返します。MEX 関数から MATLAB 関数を呼び出す際に、返される引数の数を指定できます。
次のコードでは、次の入力を指定して MATLAB 関数 gcd
を呼び出します。
UTF16 文字列として渡される関数名
MATLAB 関数によって返される出力の数。
const size_t
として指定します。関数
gcd
への入力。matlab::data::Array
要素のstd::vector
として指定します。
戻り値は、3 つの matlab::data::Array
要素が格納された std::vector
となります。
// Define arguments std::vector<matlab::data::Array> args({ factory.createScalar<int16_t>(30), factory.createScalar<int16_t>(56)}); const size_t numReturned = 3; std::vector<matlab::data::Array> result; // Call feval and return 3 arguments result = matlabPtr->feval(u"gcd", numReturned, args);