C++ MEX-функции

MEX или MATLAB executable относится к программам, которые автоматически загружаются и могут вызываться как любой MATLAB® функция.

C++ MEX API

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.

Базовый проект C++ 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-функции из MATLAB

Чтобы вызвать MEX-функцию, используйте имя файла, без расширения файла. Синтаксис вызова зависит от входных и выходных аргументов, заданных MEX-функцией. Файл MEX должен находиться в пути MATLAB или в текущей рабочей папке при вызове.

Примеры C++ MEX-функции

Эти примеры иллюстрируют реализацию C++ MEX-функции:

  • arrayProduct.cpp - Умножает массив на скалярный вход и возвращает получившийся массив.

  • yprime.cpp - Определяет дифференциальные уравнения для ограниченной задачи трех тел.

  • phonebook.cpp - Показывает, как управлять структурами.

  • modifyObjectProperty.cpp - Показывает, как работать с MATLAB.

Похожие темы