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

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

API C++ MEX

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++

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. смотрите Создают Исходный файл C++ MEX

Вызовите MEX-функцию из MATLAB

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

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

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

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

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

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

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

Похожие темы