Чтобы вызвать функции 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
Вот то, как задать TextColor MATLAB класс перечисления.
classdef TextColor enumeration Red Green Blue end end
Это выражение MATLAB создает TextString объект путем передачи вектора символов и члена перечисления к конструктору класса.
T = TextString('Any text string',TextColor.Blue);Следующий пример кода создает TextString MATLAB возразите и отображает значения свойств. Создать TextString объект:
Задайте matlab::data::CharArray для аргумента вектора символов MATLAB.
Задайте matlab::data::EnumArray для TextColor.Blue MATLAB аргумент перечисления.
Передайте вектор аргумента MATLABEngine::feval.
Получите значения свойств с помощью MATLABEngine::getProperty и отобразите значения.
Этот пример требует, чтобы вы задали TextString MATLAB и 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++.
matlab::data::ArrayFactory | matlab::engine::MATLABEngine | matlab::engine::connectMATLAB