exponenta event banner

Функции C++ MEX

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

C++ MEX API

Функции 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

Функция 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 из MATLAB

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

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

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

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

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

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

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

Связанные темы