MATLAB ® Data API поддерживает типы массивов, которые позволяют функциям MEX передавать определенные типы данных из и в MATLAB. Дополнительные сведения о типах массивов см. в разделе MATLAB Data API.
Наиболее общим типом массива является массив matlab::data::Array. Более конкретные типы предоставляют дополнительные функциональные возможности. Например, matlab::data::TypedArray<T> обеспечивает поддержку итератора и matlab::data::CharArray предоставляет преобразователи для типов ASCII и UTF16.
В следующих разделах показано, как определить типы ввода и вывода с помощью интерфейса 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 при определении массивов 2-D.
Использовать 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