MEX или MATLAB executable обращаются к программам, которые автоматически загружаются и могут быть названы как любая функция 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.
Чтобы вызвать MEX-функцию, используйте имя файла без расширения файла. Синтаксис вызова зависит от аргументов ввода и вывода, заданных MEX-функцией. Файл MEX должен быть на пути MATLAB или в текущей рабочей папке, когда названо.
Эти примеры иллюстрируют реализацию MEX-функций C++:
arrayProduct.cpp
— Умножает массив на скалярный вход и возвращает полученный массив.
yprime.cpp
— Определяет дифференциальные уравнения для ограниченной задачи трех тел.
phonebook.cpp
— Показывает, как управлять структурами.
modifyObjectProperty.cpp
— Показывает, как работать с MATLAB.