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++. Другие возможные расширения включают .C
cc
, и .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.data
my 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 mexatexit
Closing file matlab.data.
Отобразите содержимое matlab.data
.
type matlab.data
my input string