主要内容

处理输入和输出

c++ MEX API提供了一些特性,使您能够访问和验证参数。这两个matlab:墨西哥人::ArgumentListmatlab::数据::数组定义对检查传递给MEX函数的参数有用的函数。的Matlab :: Data :: ArrayType枚举类使您能够测试特定类型的输入。

参数验证

这个表显示了对错误检查有用的函数。

matlab::墨西哥人::ArgumentList::尺寸() 确定输入的数量。尺寸争论列表数组等于函数调用中使用的参数数量。
matlab::墨西哥人::ArgumentList::空() 测试无输入或输出。如果不需要输入或输出参数调用MEX函数,则相应争论列表参数是空的。
matlab:数据::数组::方法() 确定输入参数的类型。这个函数返回Matlab :: Data :: ArrayType目的。
matlab::数据::数组:getDimensions () 确定输入参数数组的维数。这个函数返回Matlab :: Data :: ArrayDimensions对象,被定义为STD :: Vector
Matlab :: Data :: Array :: GetNumberofElements() 确定输入参数数组中的元素数量。
Matlab :: Data :: Array :: Isempty() 确定输入参数数组是否为空。

这些示例展示了如何在MEX文件中测试参数值并在MATLAB中抛出错误®当测试失败。使用Matlab :: Engine :: Matlabengine :: Feval打电话给matlab的功能错误要么警告功能。

调用Feval.与这些参数:

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

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

  • 用MATLAB显示的消息错误要么警告功能。在一个std::向量包含这一点matlab::数据::数组创建使用matlab:: data:: ArrayFactory工厂。

打电话给Feval.并定义参数,获得一个指向MATLAB引擎和MATLAB数据数组工厂的指针。

类MexFunction: public matlab::mex::Function {public: void operator()(matlab::mex::ArgumentList输出,matlab::mex::ArgumentList输入){std::shared_ptr matlabPtr = getEngine();matlab::数据::ArrayFactory工厂;...}}

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

if(inputs.size()!= 3){matlabptr-> feval(u“错误”,0,std :: vector ({factore.createscalar(“需要三个输入”)}));}

MEX文件需要赋值两个输出参数。

if (output .size() != 2) {matlabPtr->feval(u"error", 0, std::vector({factory. size());createScalar("需要两个输出")});}

第二个输入参数必须是一个1×4行向量的非复杂双打。

if(输入[1] .gettype()!= matlab :: data :: ArrayType :: double ||输入[1] .gettype()== matlab :: data :: ArrayType :: Complex_double ||输入[1].getnumberofeLements()!= 4 ||输入[1] .getDimensions()[1] == 1){matlabptr-> feval(U“错误”,0,std :: Vector ({factore.createScalar(“输入必须为4元列行”)}));}

ArgumentList迭代器

matlab:墨西哥人::ArgumentList容器实现了一对标记参数列表的开头和结尾的迭代器。使用这些迭代器将所有输入循环到MEX函数。例如,该MEX函数使用基于范围的所有输入循环。

#include“mex.hpp”#include“mexadapter.hpp”类mexfunction:public matlab :: mex :: function {matlab :: data :: drastfactory factory;公共:void运算符()(Matlab :: Mex :: ArgumentList输出,Matlab :: Mex :: ArgumentList输入){double sm = 0;for(const matlab :: data :: typedarray &elem:输入){sm = sm + elem [0];输出[0] = factory.createscalar(SM);};};

将这个MEX文件保存为sumInputs.cpp并使用梅克斯命令。使用一定范围的参数调用函数。

梅克斯sumInputs.cppsumInputs(1,2,3,4,5,6,7) ans = 28

金宝app支持变量数量的参数

通过检查输入和输金宝app出的大小,可以在MEX函数中支持可变数量的参数matlab:墨西哥人::ArgumentList数组中。

在下面的代码段中,输出parameter数组表示调用MEX函数时指定的输出数量。使用ArgumentList :: size.函数时,这段代码确定在调用MEX函数时指定多少输出。

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

另请参阅

相关话题