MATLAB® Data API поддерживает типы массива, которые позволяют MEX-функциям передать определенные типы данных от и до MATLAB. Для получения информации о дополнительных типах массивов см. MATLAB Data API.
Самым общим типом массива является matlab::data::Array
. Более определенные типы обеспечивают дополнительную функциональность. Например, matlab::data::TypedArray<T>
оказывает поддержку итератора, и matlab::data::CharArray
обеспечивает конвертеры для типов UTF16 и ASCII.
Следующие разделы показывают, как задать типы ввода и вывода с помощью MATLAB Data 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>
, чтобы задать определенные типы, такие как числовые и логические значения. Например, вызовите myMexFcn
из MATLAB.
m = [-2 2 6 8]; result = myMexFcn(m);
Присвойте вход типа MATLAB double
в MEX-функции.
matlab::data::TypedArray<double> doubleArray = inputs[0];
Возвратите выходной параметр, чтобы иметь тип double
в MATLAB:
outputs[0] = factory.createArray<double>({ 1,4 }, { -2.0, 2.0, 6.0, 8.0 });
Используйте matlab::data::CharArray
, чтобы передать символьные массивы и от MEX-функций. Например, вызовите myMexFcn
из MATLAB с вектором символов.
result = myMexFcn('Character vector');
Присвойте вход типа MATLAB char
в MEX-функции.
matlab::data::CharArray charVector2 = inputs[0];
Возвратите выходной параметр, чтобы иметь тип char
в MATLAB.
outputs[0] = factory.createCharArray("Character vector");
Используйте matlab::data::TypedArray<MATLABString>
, чтобы передать строковые массивы и от MEX-функций. Например, вызовите myMexFcn
из MATLAB с массивом строк.
result = myMexFcn(["Array", "of", "strings"]);
Присвойте вход типа MATLAB string
в MEX-функции.
matlab::data::TypedArray<matlab::data::MATLABString> stringArray = inputs[0];
Возвратите выходной параметр, чтобы иметь тип string
в MATLAB.
outputs[0] = factory.createArray({ 1,3 }, { u"Array", u"of", u"strings" });
Используйте matlab::data::CellArray
, чтобы передать массивы ячеек и от MEX-функций. Например, вызовите myMexFcn
из MATLAB с массивом ячеек.
result = myMexFcn({'MATLAB cell array', [1.2 2.2; 3.2 4.2]});
Присвойте вход типа MATLAB cell
в MEX-функции.
matlab::data::CellArray inCellArray2 = inputs[0];
Возвратите выходной параметр, чтобы иметь тип cell
в MATLAB.
outputs[0] = factory.createCellArray({ 1,2 }, factory.createCharArray("MATLAB Cell Array"), factory.createArray<double>({ 2,2 }, { 1.2, 3.2, 2.2, 4.2 }));
Отметьте главное строкой по сравнению с главным столбцом различием в упорядоченном расположении между C++ и MATLAB при определении 2D массивов.
Используйте matlab::data::StructArray
, чтобы передать структуры и от MEX-функций. Например, вызовите myMexFcn
из MATLAB со структурой.
st.Name = 'Color';
st.Value = uint8([1 0 1]);
result = myMexFcn(st);
Присвойте вход типа MATLAB struct
в MEX-функции.
matlab::data::StructArray inStructArray = inputs[0];
Возвратите выходной параметр, чтобы иметь тип struct
в MATLAB.
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::data::Array
, чтобы передать объект и от MEX-функций. Например, вызовите myMexFcn
из MATLAB с объектом пользовательского класса под названием MyClass
.
classdef MyClass property MeanValue = 0.5 end end
obj = MyClass;
Присвойте вход типа MATLAB MyClass
в MEX-функции.
matlab::data::Array obj = inputs[0];
Примите, что MyClass
задает свойство под названием MeanValue
, который содержит скалярный double
. Получите значение свойства с помощью matlab::engine::MATLABEngine::getProperty
.
matlab::data::TypedArray<double> meanValue = matlabPtr->getProperty(obj, u"MeanValue"); double m meanValue[0];
Установите значение свойства с помощью matlab::engine::MATLABEngine::setProperty
и возвратите объект в MATLAB как matlab::data::Array
.
matlabPtr->setProperty(obj, u"MeanValue", factory.createScalar<double>(1.02)); outputs[0] = obj;
Для примера того, как работать с объектами MATLAB, смотрите Объекты MATLAB в MEX-функциях.
cell
| char
| double
| string
| struct