Когда создание 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
блоки. Полученная информация состоит из размера массивов, введите, и является ли это вещественным числом.