Чтобы вызвать функции MATLAB ®, для которых требуются элементы перечисления MATLAB в качестве входных данных, определите элемент перечисления как matlab::data::EnumArray. Использовать matlab::data::ArrayFactory для создания массива перечисления. matlab::data::EnumArray содержит имя класса MATLAB и один или несколько элементов перечисления. Можно также передать массив в качестве переменной в рабочую область MATLAB с помощью MATLABEngine::setVariable.
Примечание
Для передачи matlab::data::EnumArray для MATLAB именованный класс MATLAB должен существовать и находиться в пути MATLAB.
Предположим, что вы определяете следующее: TextString в MATLAB. Этот класс определяет свойство, которое вводится как определенный класс перечисления с именем TextColor. TextString конструктор класса принимает два входных аргумента:
Str - Массив символов 1 на n
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 для MATLAB TextColor.Blue аргумент перечисления.
Передать вектор аргумента в 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++ см. в разделе Сборка программ ядра C++.
matlab::data::ArrayFactory | matlab::engine::connectMATLAB | matlab::engine::MATLABEngine