C++ MATLAB Data API разделяемая поддержка библиотеки кода MATLAB Со строгим контролем типов

Когда создание C++ совместно использовало библиотеки из MATLAB® функции или классы, можно предусмотреть, как представлять типы данных MATLAB в коде приложения C++ при помощи отображений стандартного и пользовательского типа данных между MATLAB и C++. Чтобы задать требования типа данных, вы используете arguments блокируйтесь в функции MATLAB или a properties блокируйтесь и arguments блокируйтесь в классе MATLAB. Например, если ваш код приложения C++ использует float тип данных, чтобы представлять действительное скалярное двойное значение, его эквивалентным представлением в MATLAB является (1,1) single {mustBeReal}.

Демонстрационная функция MATLAB с данными со строгим контролем типов

function r = stronglyTypedFun(num)
arguments
    num (1,1) single {mustBeReal}
end
r = magic(num);

Демонстрационный класс MATLAB с данными со строгим контролем типов

classdef MyPosition
    properties
        X (1,1) double {mustBeReal}
        Y (1,1) double {mustBeReal}
    end
end

Для получения дополнительной информации смотрите Отображения Типа данных Между C++ и кодом MATLAB Со строгим контролем типов.

То, когда вы компилируете функцию MATLAB со строгим контролем типов, класс или пакет, MATLAB Compiler SDK™ генерирует C++, совместно использовало заголовок библиотеки (.hpp файл) и развертываемый архив (.ctf файл). Чтобы сгенерировать заголовочный файл из командной строки MATLAB, войдите mcc команда с помощью этого синтаксиса:

mcc -W 'cpplib:<library_name>,generic' <MATLAB file(s) and/or package folder(s)> -d <output folder>

Совет

Сгенерировать заголовочный файл с помощью приложения Library Compiler:

  1. В разделе Type панели инструментов нажмите C++ Shared Library.

  2. В разделе Exported Functions панели инструментов добавьте соответствующие файлы MATLAB.

  3. В разделе the API selection выберите опцию Create interfaces that use the MATLAB Data API and Strongly Typed Interface и нажмите Package.

Заголовочный файл (.hpp) сгенерирован в том же месте как развертываемый архив (.ctf) в v2\generic_interface папка.

Сгенерированный заголовочный файл:

Отображение класса MATLAB со строгим контролем типов к заголовочному файлу C++

Класс MATLAB со строгим контролем типовОтрывок заголовочного файла C++
classdef MyRectangle

    properties
        UpperLeft  (1,1) shapes.MyPosition
        LowerRight (1,1) shapes.MyPosition
    end
    methods
        function R = enlarge(R, n)
            arguments
                R (1,1) shapes.MyRectangle
                n (1,1) double {mustBeReal}
            end
            % code
        end
        function R = show(R)
            arguments
                R (1,1) shapes.MyRectangle
            end
            % code
        end
    end
end
namespace shapes {
    class MyRectangle : public MATLABObject<MATLABControllerType> { 
    public:

        // constructors
        MyRectangle() : MATLABObject() {}

        // code

        // properties
        shapes::MyPosition getUpperLeft() {
            // code
        }
        void setUpperLeft(shapes::MyPosition obj) {
            // code
        }
        shapes::MyPosition getLowerRight() {
            // code
        }
        void setLowerRight(shapes::MyPosition obj) {
            // code
        }

        // methods
        matlab::data::Array show() { 
            // code
        }

        matlab::data::Array enlarge(double n) { 
            // code
        }

    };
}

Сгенерированный заголовочный файл (.hpp файл) и MatlabCppSharedLib.hpp заголовочный файл включен в код приложения C++ с помощью #include директивы. Можно затем скомпилировать и запустить приложение.

Демонстрационный фрагмент кода приложения C++

#include "MatlabCppSharedLib.hpp"
#include "output/cpp/v2/generic_interface/libshapesv2.hpp" //header file generated by mcc

int main(const int argc, char *argv[]) {
    try {
        // common starter code that can apply to any application
        auto mode = matlab::cpplib::MATLABApplicationMode::IN_PROCESS;
        std::vector<std::u16string> OPTIONS = {u"-nojvm"};
        auto appPtr = matlab::cpplib::initMATLABApplication(mode, OPTIONS);
        std::string ctfName(argv[1]);
        auto libPtr = matlab::cpplib::initMATLABLibrary(appPtr, std::u16string(ctfName.cbegin(), ctfName.cend()));
        std::shared_ptr<MATLABControllerType> matlabPtr(std::move(libPtr));

        // application specific code that relies on the generated header
        shapes::MyPosition p1(matlabPtr);
        ...
        shapes::MyRectangle r1(matlabPtr);
        ...
    }
}

Совет

  • При записи кода приложения C++ необходимо включать заголовочный файл (.hpp файл) сгенерированный mcc команда или приложение Library Compiler и MatlabCppSharedLib.hpp заголовочный файл с помощью #include директивы.

  • Ваш код MATLAB должен быть со строгим контролем типов, чтобы усилить все функции интерфейса. В противном случае отображение данных между MATLAB и C++ отсутствует, и вы не можете использовать нативные типы данных C++.

  • Во время процесса компиляции информация со строгим контролем типов получена только из arguments и properties блоки. Полученная информация состоит из размера массивов, введите, и является ли это вещественным числом.

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

|

Похожие темы