MATLAB检查C ++ MEX文件中的输入/输出数量

示例

在此示例中,我们将编写一个基本程序,该程序检查传递给MEX函数的输入和输出的数量。

首先,我们需要创建一个实现“ MEX网关”的C ++文件。这是从MATLAB调用文件时执行的函数。

testinputs.cpp

// MathWorks提供的头文件
#include "mex.h"

// 网关功能
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
    // 如果输入数量不是3或4,则此功能将出错
    // 如果输出数量大于1,此功能将出错

    // 检查输入:
    if (nrhs < 3 || nrhs > 4) {
        mexErrMsgIdAndTxt("Testinputs:ErrorIdIn",
            "MEX文件的输入数量无效。");
    }

    // 检查输出:
    if (nlhs > 1) {
        mexErrMsgIdAndTxt("Testinputs:ErrorIdOut",
                "MEX文件的输出数量无效。");
    }
}

首先,我们包含mex.h标题,该标题包含与MEX API一起使用的所有必需函数和数据类型的定义。然后,我们实现mexFunction如图所示的功能,其中其签名不得更改,而与实际使用的输入/输出无关。功能参数如下:

  • nlhs:请求的输出数量。

  • *plhs[]:包含MEX API格式的所有输出的数组。

  • nrhs:传递的输入数。

  • *prhs[]:包含MEX API格式的所有输入的数组。

接下来,我们检查输入/输出参数的数量,如果验证失败,则使用mexErrMsgIdAndTxt函数抛出错误(期望使用somename:iD格式标识符,简单的“ ID”将不起作用)。


将文件编译为后mex testinputs.cpp,可以在MATLAB中将函数调用为:

>> testinputs(2,3)
Error using testinputs. MEX文件的输入数量无效。

>> testinputs(2,3,5)

>> [~,~] = testinputs(2,3,3)
Error using testinputs. MEX文件的输出数量无效。