主要内容

处理输入和输出

C++ MeX API提供了可以访问和验证参数的特性。matlab::mex::ArgumentListmatlab::data::Array定义有助于对传递给MEX函数的参数执行检查的函数。这个matlab:: data:: ArrayType枚举类使您能够测试特定类型的输入。

参数验证

此表显示了用于错误检查的函数。

matlab::mex::ArgumentList::size() 确定输入的数量。大小ArgumentList数组等于函数调用中使用的参数数。
matlab::mex::ArgumentList::empty() 测试是否没有输入或输出。如果在没有输入或输出参数的情况下调用MEX函数,则分别ArgumentList参数为空。
matlab::data::Array::getType() 确定输入参数的类型。此函数返回matlab:: data:: ArrayType对象。
matlab::data::Array::getDimensions() 确定输入参数数组的维度。此函数返回一个matlab:: data:: ArrayDimensions对象,定义为向量< size_t std:: >.
matlab::数据::数组:getNumberOfElements () 确定输入参数数组中的元素数。
matlab::数据::数组:isEmpty () 确定输入参数数组是否为空。

这些示例演示如何在MEX文件中测试参数值,并在MATLAB中抛出错误®当测试失败时。使用matlab::引擎::MATLABEngine::函数宏指令函数调用MATLAB错误警告功能。

呼叫函数宏指令有了这些论点:

  • 这个错误警告函数名,作为UTF16字符串传递。

  • 返回的参数数,在这些示例中为零。

  • 要用MATLAB显示的消息错误警告函数。以向量包含matlab::data::Array使用matlab::data::ArrayFactory工厂

召唤函数宏指令并定义参数,获取指向MATLAB引擎和MATLAB数据数组工厂的指针。

类MexFunction:public matlab::mex::Function{public:void操作符()(matlab::mex::ArgumentList输出,matlab::mex::ArgumentList输入){std::SharedptrmatlabPtr=getEngine();matlab::data::ArrayFactory;..}}

MEX文件需要三个输入参数。

if (input .size() != 3) {matlabPtr->feval(u"error", 0, std::vector({factory. size()});createScalar("Three input required")});}

MEX文件需要分配两个输出参数。

如果(outputs.size()!=2){matlabPtr->feval(u“error”,0,std::vector({factory.createScalar(“需要两个输出”)});}

第二个输入参数必须是1乘4的非复杂双精度行向量。

如果(输入[1]. gettype () ! = matlab::数据::ArrayType::双| |输入[1]. gettype () = = matlab::数据::ArrayType:: COMPLEX_DOUBLE | |输入[1].getNumberOfElements() ! = 4 | |输入[1].getDimensions () [1] = = 1) {matlabPtr - >函数宏指令(u“错误”,0,std::向量数组< matlab::数据::>({工厂。createScalar("Input must be 4-element row vector")}));}

参数列表迭代器

这个matlab::mex::ArgumentListContainer实现了一对标记参数列表开始和结束的迭代器。使用这些迭代器来遍历MEX函数的所有输入。例如,这个MEX函数使用基于范围的方法对所有输入进行求和对于

#include "mexAdapter.hpp" #include "mexAdapter.hpp" class MexFunction: public matlab::mex::Function {matlab::data::ArrayFactory factory;public: void operator()(matlab::mex::ArgumentList输出,matlab::mex::ArgumentList输入){double sm = 0;for (const matlab::data::TypedArray& elem: inputs) {sm = sm + elem[0];} output [0] = factory.createScalar(sm);};};

将此MEX文件另存为sumInputs.cpp并使用墨西哥人使用一系列参数调用函数。

墨西哥人sumInputs.cppSUM输入(1,2,3,4,5,6,7)ans=28

万博1manbetx支持可变数量的参数

通过检查输入和输万博1manbetx出的大小,可以在MEX函数中支持可变数量的参数matlab::mex::ArgumentList大堆

在下面的代码段中输出参数数组指示调用MEX函数时指定的输出数量ArgumentList:大小函数,此代码确定调用MEX函数时指定的输出数。

void操作符()(matlab::mex::ArgumentList输出,matlab::mex::ArgumentList输入){if(outputs.size()=3){outputs[0]=//分配第一个输出产出[1]=//分配第二个输出产出[2]=//分配第三个输出}else if(outputs.size()==1){outputs[0]=//只分配一个输出}else{matlabPtr->feval(u“error”,0,std::vector({factory.createScalar(“需要一个或三个输出”));}

另见

相关的话题