Передача перечислений MATLAB с C++

Чтобы вызвать функции MATLAB®, которые требуют участников перечисления MATLAB как входных параметров, задайте участника перечисления как matlab::data::EnumArray . Использование matlab::data::ArrayFactory, чтобы создать массив перечисления. matlab::data::EnumArray содержит имя класса MATLAB и одного или несколько участников перечисления. Можно также передать массив как переменную к MATLAB workspace с помощью 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);

Следующий пример кода создает объект MATLAB TextString и отображает значения свойств. Создать объект TextString:

  • Задайте matlab::data::CharArray для аргумента вектора символа MATLAB.

  • Задайте matlab::data::EnumArray для аргумента перечисления TextColor.Blue MATLAB.

  • Передайте вектор аргумента MATLABEngine::feval 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++.

Смотрите также

| |

Похожие темы

Была ли эта тема полезной?