Когда создание 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:
В разделе Type панели инструментов нажмите C++ Shared Library.
В разделе Exported Functions панели инструментов добавьте соответствующие файлы MATLAB.
В разделе the API selection выберите опцию Create interfaces that use the MATLAB Data API and Strongly Typed Interface и нажмите Package.
Заголовочный файл (.hpp) сгенерирован в том же месте как развертываемый архив (.ctf) в v2\generic_interface папка.
Сгенерированный заголовочный файл:
Сопоставляет типы данных MATLAB со строгим контролем типов с типами данных C++. Для примера смотрите, Создают C++ MATLAB Data API Разделяемый Заголовок Библиотеки от функции MATLAB Со строгим контролем типов.
Содержит пространства имен C++, которые соответствуют директориям пакета MATLAB того же имени. Для примера смотрите, Создают C++ MATLAB Data API Разделяемый Заголовок Библиотеки от Классов MATLAB Со строгим контролем типов, Содержавшихся в Пакете.
Содержит классы C++, которые соответствуют классам MATLAB того же имени.
Содержит общедоступные методы C++, которые соответствуют открытым методам классов MATLAB. Имена методов неизменны и могут быть использованы как есть в коде приложения C++. Эти выровненные имена избавляют от необходимости промежуточные высокоуровневые функции слоя, которые вызывают методы класса через feval функциональное выполнение.
Содержит C++ get и set методы для публичных свойств классов MATLAB. Имена свойства классов MATLAB предварительно ожидаются с get или set. Например, если именем свойства в классе MATLAB является UpperLeft, соответствующими именами методов C++ является getUpperLeft и setUpperLeft.
Отображение класса 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 |
|
Сгенерированный заголовочный файл (.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 блоки. Полученная информация состоит из размера массивов, введите, и является ли это вещественным числом.