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