MATLAB® обеспечивает API, который использует современную семантику C++ и шаблоны разработки, MATLAB Data API. MathWorks рекомендует, чтобы вы создали MEX-функции с этим API. Для получения дополнительной информации см. Приложения C++ MEX.
Если ваши MEX-функции должны запуститься в MATLAB R2017b или ранее, то необходимо использовать Матричные API-функции C в приложениях C++. MEX-функции, созданные с Матричным API C, поддерживают все стандарты языка C++. Эта тема обсуждает определенные вопросы языка C++, чтобы рассмотреть при создании и использовании файлов MEX.
Можно использовать примеры кода С MATLAB в приложениях C++. Например, смотрите mexcpp.cpp в Примере Класса C++, который содержит и C и операторы C++.
Примеры исходного кода C++ MATLAB используют .cpp расширение файла. Дополнительный .cpp однозначно и распознан компиляторами C++. Другие возможные расширения включают .Ccc , и .cxx.
Чтобы создать файл MEX C++, введите:
mex filename.cpp
где filename имя файла исходного кода, на вашем пути MATLAB.
Можно запустить файл MEX C++ только в системах с той же версией MATLAB, на котором был скомпилирован файл.
Не используйте mxFree или mxDestroyArray функции в деструкторе C++ класса используются в MEX-функции. Если MEX-функция выдает ошибку, MATLAB очищает переменные файла MEX, как описано в Автоматической Очистке Временных массивов в файлах MEX.
Если ошибка происходит, который вызывает объект выйти из осциллографа, MATLAB вызывает деструктор C++. Освобождение памяти непосредственно в деструкторе означает, что и MATLAB и деструктор освобождают ту же память, которая может повредить память.
Используя cout или язык C printf функция не работает как ожидалось в файлах MEX C++. Используйте mexPrintf функцию вместо этого.
Файл MEX mexcpp.cpp показывает, как использовать Код С++ с файлом MEX языка C. Пример использует функции от Матричного API C. Это использует функции членства, конструкторов, деструкторы и iostream включайте файл.
Функция задает класс myData с функциями членства display и set_data, и переменные v1 и v2. Это создает объект d из класса myData и отображает инициализированные значения v1 и v2. Это затем устанавливает v1 и v2 к вашему входу и отображениям новые значения. Наконец, delete оператор очищает объект.
Чтобы создать этот пример, скопируйте файл в путь MATLAB и в типе командной строки:
mex mexcpp.cppСинтаксисом вызова является mexcpp(num1, num2).
mexatexit.cpp пример показывает функции обработки файла C++. Сравните его с примером кода С mexatexit.c, который использует mexAtExit функция.
Пример C++ использует fileresource класс, чтобы обработать файл открывается и близкие функции. MEX-функция вызывает деструктор для этого класса, который закрывает файл данных. Этот пример также распечатывает сообщение на экране при выполнении операций на файле данных. Однако в этом случае единственная выполняемая операция файла C является операцией записи, fprintf.
Создавать mexatexit.cpp Файл MEX, скопируйте файл в путь MATLAB и тип:
mex mexatexit.cppВвод:
z = 'for the C++ MEX-file'; mexatexit(x) mexatexit(z) clear mexatexit
Writing data to file. Writing data to file.
Отобразите содержимое matlab.data.
type matlab.datamy input string for the C++ MEX-file
Пример кода С указывает mexAtExit функция, чтобы выполнить задачи очистки (закрывают файл данных), когда файл MEX очищается. Этот пример распечатывает сообщение на экране с помощью mexPrintf при выполнении операций fopen файлаfprintf, и fclose.
Создавать mexatexit.c Файл MEX, скопируйте файл в путь MATLAB и тип:
mex mexatexit.cЗапустите пример.
x = 'my input string';
mexatexit(x)
Opening file matlab.data. Writing data to file.
Очистите файл MEX.
clear mexatexitClosing file matlab.data.
Отобразите содержимое matlab.data.
type matlab.datamy input string