Исполняемый файл MEX или MATLAB® обращается к программам, которые автоматически загружаются и могут быть названы как любая функция MATLAB.
MEX-функции C++ основаны на двух API C++:
MATLAB Data API поддерживает типы данных MATLAB, и оптимизация как копирование при записи для массивов данных передала MEX-функциям. Для получения дополнительной информации см. MATLAB Data API.
Подмножество поддержек Engine API для C++ MATLAB, вызывая функции MATLAB, выполнение операторов в рабочем пространстве MATLAB и доступ к переменным и объектам. Для получения дополнительной информации смотрите API C++ MEX.
API C++ MEX поддерживает C++ 11 функций и не совместим с API MEX C. Вы не можете смешать эти API в файле MEX.
MEX-функция C++ реализована как класс под названием MexFunction
, который наследовался matlab::mex::Function
. Класс MexFunction
заменяет оператор вызова функции, operator()
. Эта реализация создает функциональный объект, который можно вызвать как функция.
Вызов MEX-функции из MATLAB инстанцирует функционального объекта, который поддерживает его состояние через последующие вызовы той же MEX-функции.
Вот базовая конструкция MEX-функции C++. Это - подкласс matlab::mex::Function
, который нужно назвать MexFunction
. Переопределения класса MexFunction
оператора вызова функции, operator()
.
#include "mex.hpp"
#include "mexAdapter.hpp"
class MexFunction : public matlab::mex::Function {
public:
void operator()(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs) {
// Function implementation
...
}
};
Вводы и выводы к MEX-функции передаются как элементы в matlab::mex::ArgumentList
. Каждым аргументом ввода или вывода является matlab::data::Array
, содержавшийся в matlab::mex::ArgumentList
.
Для примера того, как создать исходный файл C++ MEX. смотрите Создают Исходный файл C++ MEX
Чтобы вызвать MEX-функцию, используйте имя файла без расширения файла. Синтаксис вызова зависит от аргументов ввода и вывода, заданных MEX-функцией. Файл MEX должен быть на пути MATLAB или в текущей рабочей папке, когда названо.
Эти примеры иллюстрируют реализацию MEX-функций C++:
arrayProduct.cpp
— Умножает массив на скалярный вход и возвращает полученный массив.
yprime.cpp
— Определяет дифференциальные уравнения для ограниченной задачи трех тел.
phonebook.cpp
— Показывает, как управлять структурами.
modifyObjectProperty.cpp
— Показывает, как работать с MATLAB.