C++ MEX 函数
MEX(即 MEX 可执行程序)指自动加载的、可以像任何 MATLAB® 函数一样调用的程序。
C++ MEX API
C++ MEX 函数基于两个 C++ API:
MATLAB 数据 API 支持 MATLAB 数据类型和优化,例如传递给 MEX 函数的数据数组的写入时复制。有关详细信息,请参阅MATLAB Data API for C++。
MATLAB C++ Engine API 的子集支持调用 MATLAB 函数、在 MATLAB 工作区中执行语句,以及访问变量和对象。有关详细信息,请参阅C++ MEX API。
C++ MEX API 支持 C++11 功能,并且与 C MEX API 不兼容。您不能在 MEX 文件中混用这些 API。
C++ MEX 函数的基本设计
C++ MEX 函数作为从 matlab::mex::Function
继承的名为 MexFunction
的类来实现。MexFunction
类将覆盖函数调用运算符 operator()
。此实现会创建一个可以像函数一样调用的函数对象。
从 MATLAB 中调用 MEX 函数将实例化此函数对象,其状态在对同一个 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::mex::ArgumentList
中包含的一个 matlab::data::Array
。
有关示例,请参阅创建 C++ MEX 源文件。
从 MATLAB 中调用 MEX 函数
要调用 MEX 函数,请使用该文件的名称,但不带文件扩展名。调用语法取决于 MEX 函数定义的输入和输出参量。调用时,MEX 文件必须位于 MATLAB 路径或当前工作文件夹中。
C++ MEX 函数示例
以下示例说明了 C++ MEX 函数的实现:
arrayProduct.cpp
- 将数组乘以标量输入并返回生成的数组。yprime.cpp
- 定义受限三体问题的微分方程。phonebook.cpp
- 说明如何操作结构体。modifyObjectProperty.cpp
- 说明如何与 MATLAB 对象一起使用。