主要内容

结构的c++ MEX函数

墨西哥人功能设计

一个c++ MEX函数是一个覆盖了函数调用操作符的类,操作符()创建函数对象或仿函数。这些对象的行为类似于MATLAB®可以接受输入并返回输出的函数。

头文件

包括这些头文件:

  • mex.hpp-包括这个文件的c++ MEX API。

  • mexAdapter.hpp-包括这个文件一次为实现MexFunction

名称空间

c++ MEX api包含在以下命名空间中:

  • matlab:墨西哥人- - - - - -墨西哥人接口

  • matlab:数据- MATLAB数据API

  • matlab:发动机-引擎API的c++

入口点

定义一个c++的MEX函数作为一个类MexFunction这源于matlab:墨西哥人:函数类。的MexFunction类重写虚函数操作符()matlab:墨西哥人:函数类。

#include "mex.hpp" #include "mexAdapter.hpp" class MexFunction: public matlab::mex::Function {public: void operator()(matlab::mex::ArgumentList输出,matlab::mex::ArgumentList输入){//检查输入参数/ /实现功能...} }

传递参数

MATLAB将每个输入参数作为matlab::数据::数组matlab:墨西哥人::ArgumentList容器。的索引来访问每个输入ArgumentList数组中。例如,输入[0]是第一个输入,输入[1]是第二,依此类推。元素的数量输入variable等于在调用MEX函数时传递给该函数的输入参数的数量。ArgumentList万博1manbetx支持迭代器,可以在基于范围的情况下使用循环。

将输出参数赋给输出变量。例如,输出[0]是分配的第一个输出,输出[1]是第二,依此类推。元素的数量输出变量等于函数调用时指定的输出数。

将输入参数分配给其他类型的MATLAB数据数组通常是有用的。特定类型等matlab::数据::TypedArray < T >matlab:: data:: CharArray提供额外的功能,如迭代器和转换器函数。选择与输入类型匹配的类型。

例如,下面的MEX函数将输入数组赋给amatlab::数据::TypedArray <二>.该数组类型支持使用基于范围的fo万博1manbetxr循环,该循环用于将数组中的每个元素乘以2。属性中返回修改后的数组输出变量。

#include "mexAdapter.hpp" using namespace matlab::data;使用matlab::墨西哥人:ArgumentList;class MexFunction: public matlab::mex::Function {public: void operator()(ArgumentList输出,ArgumentList输入){/ /验证参数checkArguments(输出,输入);/ /实现功能TypedArray doubleArray = std::move(input[0]); / /输入[0]for (auto& elem: doubleArray) {elem *= 2;}/ /分配输出输出[0]= doubleArray;} void checkArguments(ArgumentList输出,ArgumentList输入){std::shared_ptr matlabPtr = getEngine();ArrayFactory工厂;if (inputs[0]. gettype () != ArrayType::DOUBLE || inputs[0]. gettype () == ArrayType::COMPLEX_DOUBLE) {matlabPtr->feval(u"error", 0, std::vector({factory. gettype ()});createScalar("Input must be double array")});} if (output .size() > 1) {matlabPtr->feval(u"error", 0, std::vector({factory. size()});createScalar("只返回一个输出")});}}};

构建并运行MEX函数。

墨西哥人timesTwo.cpptimesTwo (1:10)
Ans = 2 4 6 8 10 12 14 16 18 20

有关验证参数的更多信息,请参见处理输入和输出

类构造函数和析构函数

从MATLAB调用MEX函数实例化MexFunction类。例如,这个MATLAB语句创建了MexFunction类定义的myMEXFunction.cpp文件。

= myMEXFunction输出(输入);

这个实例将继续存在,直到调用MATLAB清晰的墨西哥人命令。

类构造函数和析构函数的实现提供了在构造时执行某些任务的方法MexFunction对象。例如,此代码片段打开一个文本文件以便在构造函数中读取,并在析构函数中关闭该文件。

#include "mexAdapter.hpp" #include "mexAdapter.hpp" #include  using matlab::mex::ArgumentList;类MexFunction: public matlab::mex::Function {std::ifstream inFile;public: MexFunction() {inFile.open("someTextFile.txt");} ~MexFunction() {inFile.close();} void operator()(ArgumentList输出,ArgumentList输入){....} };

例如,请参见管理外部资源从MEX功能

另请参阅

|

相关的话题