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.