Main Content

C++ MEX 函数

MEX(即 MEX 可执行程序)指自动加载的、可以像任何 MATLAB® 函数一样调用的程序。

C++ MEX API

C++ MEX 函数基于两个 C++ API:

  • MATLAB 数据 API 支持 MATLAB 数据类型和优化,例如传递给 MEX 函数的数据数组的写入时复制。有关详细信息,请参阅用于 C++ 的 MATLAB 数据 API

  • MATLAB C++ 引擎 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 的子类,必须命名为 MexFunctionMexFunction 类将覆盖函数调用运算符 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 函数的实现:

相关主题