Исполняемый файл MEX или MATLAB относится к программам, которые автоматически загружаются и могут вызываться как любая функция MATLAB ® .
Функции C++ MEX основаны на двух API C++:
MATLAB Data API поддерживает типы данных MATLAB и такие оптимизации, как копирование при записи для массивов данных, передаваемых функциям MEX. Дополнительные сведения см. в разделе API данных MATLAB.
Подмножество API MATLAB C++ Engine поддерживает вызов функций MATLAB, выполнение инструкций в рабочей области MATLAB и доступ к переменным и объектам. Дополнительные сведения см. в разделе C++ MEX API.
API C++ MEX поддерживает функции C++ 11 и несовместим с API C MEX. Нельзя смешивать эти API в файле MEX.
Функция C++ MEX реализована как класс с именем MexFunction который наследует от matlab::mex::Function. MexFunction класс переопределяет оператор вызова функции, operator(). Эта реализация создает объект функции, который можно вызвать как функцию.
Вызов функции MEX из MATLAB создает экземпляр объекта функции, который сохраняет свое состояние при последующих вызовах той же самой функции MEX.
Вот основная конструкция функции C++ MEX. Является подклассом 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.
Для вызова функции MEX используйте имя файла без расширения файла. Синтаксис вызова зависит от входных и выходных аргументов, определенных функцией MEX. Файл MEX должен находиться по пути MATLAB или в текущей рабочей папке при вызове.
Эти примеры иллюстрируют реализацию функций C++ MEX:
arrayProduct.cpp - умножает массив на скалярный вход и возвращает результирующий массив.
yprime.cpp - Определяет дифференциальные уравнения для ограниченной задачи с тремя телами.
phonebook.cpp - Показывает, как манипулировать структурами.
modifyObjectProperty.cpp - Показывает, как работать с MATLAB.