C++ MEX Functions
MEX or MATLAB executable refers to programs that are automatically loaded and can be called like any MATLAB® function.
C++ MEX API
C++ MEX functions are based on two C++ APIs:
The MATLAB Data API supports MATLAB data types and optimizations like copy-on-write for data arrays passed to MEX functions. For more information, see MATLAB Data API for C++.
A subset of the MATLAB C++ Engine API supports calling MATLAB functions, execution of statements in the MATLAB workspace, and access to variables and objects. For more information, see C++ MEX API.
The C++ MEX API supports C++11 features and is not compatible with the C MEX API. You cannot mix these APIs in a MEX file.
Basic Design of C++ MEX Functions
A C++ MEX function is implemented as a class named MexFunction
that inherits from matlab::mex::Function
. The MexFunction
class overrides
the function call operator, operator()
. This implementation
creates a function object that you can call like a function.
Calling the MEX function from MATLAB instantiates the function object, which maintains its state across subsequent calls to the same MEX function.
Here is the basic design of a C++ MEX function. It is a subclass of matlab::mex::Function
that must be named MexFunction
.
The MexFunction
class overrides the function call operator,
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
...
}
};
Inputs and outputs to the MEX function are passed as elements in a matlab::mex::ArgumentList
. Each input or output argument is a matlab::data::Array
contained in the
matlab::mex::ArgumentList
.
For an example, see Create a C++ MEX Source File.
Call MEX Function from MATLAB
To call a MEX function, use the name of the file, without the file extension. The calling syntax depends on the input and output arguments defined by the MEX function. The MEX file must be on the MATLAB path or in the current working folder when called.
Examples of C++ MEX Functions
These examples illustrate the implementation of C++ MEX Functions:
arrayProduct.cpp
— Multiplies an array by a scalar input and returns the resulting array.yprime.cpp
— Defines differential equations for restricted three-body problem.phonebook.cpp
— Shows how to manipulate structures.modifyObjectProperty.cpp
— Shows how to work with MATLAB objects.