Вызов MATLAB® функции, которые требуют от представителей перечисления MATLAB в качестве входов, определяют представителя перечисления как matlab::data::EnumArray
. Использование matlab::data::ArrayFactory
для создания массива перечисления. The matlab::data::EnumArray
содержит имя класса MATLAB и одни или несколько представителей перечисления. Можно также передать массив как переменную в рабочее пространство MATLAB с помощью MATLABEngine::setVariable
.
Примечание
Для прохождения matlab::data::EnumArray
для MATLAB должен существовать именованный класс MATLAB, который должен находиться в пути MATLAB.
Предположим, что вы задаете следующее TextString
в MATLAB. Этот класс определяет свойство, которое вводится как определенный класс перечисления с именем TextColor
. The TextString
конструктор классов принимает два входных параметров:
Str
- Массив 1 на n char
Color
- представитель перечисления TextColor
класс.
classdef TextString properties Str(1,:) char Color TextColor end methods function obj = TextString(str,color) if nargin == 2 obj.Str = str; obj.Color = color; end end end end
Вот как определить MATLAB TextColor
класс перечисления.
classdef TextColor enumeration Red Green Blue end end
Это выражение MATLAB создаёт TextString
объект путем передачи вектора символов и представителя перечисления в конструктор классов.
T = TextString('Any text string',TextColor.Blue);
Следующий пример кода создает MATLAB TextString
Объект и отображения значения свойств. Как создать TextString
объект:
Задайте matlab::data::CharArray
для аргумента вектора символов MATLAB.
Задайте matlab::data::EnumArray
для TextColor.Blue
MATLAB аргумент перечисления.
Передайте вектор аргумента в MATLABEngine::feval
.
Получите значения свойств с помощью MATLABEngine::getProperty
и отобразите значения.
Примечание
Этот пример требует, чтобы вы определили MATLAB TextString
и TextColor
классы, описанные здесь. Эти классы должны находиться в пути к общему сеансу работы с MATLAB, используемой в этом примере.
#include "MatlabDataArray.hpp" #include "MatlabEngine.hpp" #include <iostream> void enumArray() { using namespace matlab::engine; // Connect to named shared MATLAB session started as: // matlab -r "matlab.engine.shareEngine('myMatlabEngine')" String session(u"myMatlabEngine"); std::unique_ptr<MATLABEngine> matlabPtr = connectMATLAB(session); // Create MATLAB data array factory matlab::data::ArrayFactory factory; // Create enumeration array auto enumColor = factory.createEnumArray({ 1,1 }, "TextColor", { "Blue" }); // Create argument vector std::vector<matlab::data::Array> args({ factory.createCharArray("Any text string"), enumColor}); // Call MATLAB TextString to create object matlab::data::Array T = matlabPtr->feval(u"TextString", args); // Get the value of the Str property matlab::data::CharArray c = matlabPtr->getProperty(T, u"Str"); std::cout << "Str property value: " << c.toAscii() << std::endl; // Get the value of the Color property matlab::data::EnumArray col = matlabPtr->getProperty(T, u"Color"); std::cout << "Color property class: " << col.getClassName() << std::endl; std::cout << "Color property value: " << std::string(col[0]) << std::endl; }
Вот выход программы.
Str property value: Any text string Color property class: TextColor Color property value: Blue
Для получения информации о том, как настроить и создать программы C++ engine, смотрите Сборка программ C++ Engine.
matlab::data::ArrayFactory
| matlab::engine::connectMATLAB
| matlab::engine::MATLABEngine