主要内容

创建一个c++源文件墨西哥人

这里是如何创建一个基本的c++函数墨西哥人。这个函数只是增加了一个抵消输入数组的每个元素展示基本的输入和输出。更详细的讨论创建墨西哥人函数源代码,看看c++墨西哥人的结构功能和相关的话题。

创建源文件

使用你的编辑器,创建一个文件. cpp扩展和添加注释说明。例如,MyMEXFunction.cpp

/ * MyMEXFunction每* *添加第二个输入元素的第一输入* = MyMEXFunction (a, b);* /

添加需要的头文件

对于c++墨西哥人功能,添加这些头文件。

/ * MyMEXFunction每* *添加第二个输入元素的第一输入* = MyMEXFunction (a, b);* / # include”墨西哥人。hpp mexAdapter.hpp“# include

使用方便的定义

选择指定的名称空间matlab:数据和定义其他便利条件。

/ * MyMEXFunction每* *添加第二个输入元素的第一输入* = MyMEXFunction (a, b);* / # include”墨西哥人。hpp mexAdapter.hpp“# includeusing namespace matlab::data; using matlab::mex::ArgumentList;

定义MexFunction类

所有c++墨西哥人功能被实现为一个类MexFunction。这个类必须来自matlab:墨西哥人:函数

/ * MyMEXFunction每* *添加第二个输入元素的第一输入* = MyMEXFunction (a, b);* / # include”墨西哥人。hpp mexAdapter.hpp“# includeusing namespace matlab::data; using matlab::mex::ArgumentList; class MexFunction : public matlab::mex::Function { };

定义操作符()

所有MexFunction类必须覆盖函数调用操作符,操作符(),接受两个参数的类型matlab:墨西哥人::ArgumentList。这些参数包含输入和输出。

/ * MyMEXFunction每* *添加第二个输入元素的第一输入* = MyMEXFunction (a, b);* / # include”墨西哥人。hpp mexAdapter.hpp“# includeusing namespace matlab::data; using matlab::mex::ArgumentList; class MexFunction : public matlab::mex::Function { public: void operator()(ArgumentList outputs, ArgumentList inputs) { } };

添加成员函数来检查参数

测试参数是否正确的类型和大小。如果测试失败,调用MATLAB®错误函数。

/ * MyMEXFunction每* *添加第二个输入元素的第一输入* = MyMEXFunction (a, b);* / # include”墨西哥人。hpp mexAdapter.hpp“# includeusing namespace matlab::data; using matlab::mex::ArgumentList; class MexFunction : public matlab::mex::Function { public: void operator()(ArgumentList outputs, ArgumentList inputs) { } void checkArguments(ArgumentList outputs, ArgumentList inputs) {/ /获取指针引擎std::要查看< matlab::引擎::MATLABEngine > matlabPtr = getEngine ();/ /获取数组工厂ArrayFactory工厂;/ /检查第一个输入参数如果(输入[0]. gettype () ! = ArrayType::双| |输入[0].getNumberOfElements () ! = 1) {matlabPtr - >函数宏指令(u“错误”,0,std::向量<数组>({工厂。createScalar(“第一输入必须标量双”)}));}/ /检查第二个输入参数如果(输入[1]. gettype () ! = ArrayType:: DOUBLE) {matlabPtr - >函数宏指令(u“错误”,0,std::向量<数组>({工厂。createScalar(输入必须双数组)}));}/ /检查数量的输出如果(outputs.size () > 1) {matlabPtr - >函数宏指令(u“错误”,0,std::向量数组< >({工厂。createScalar(“只有一个输出返回”)}));}}};

实现计算

标量偏移量,并将其分配给一个常量。输入数组并将其移动到一个matlab::数据::TypedArray <双>数组。偏移量添加到数组中的每个元素,并将修改后的数组分配给变量的输出。

/ * MyMEXFunction每* *添加第二个输入元素的第一输入* = MyMEXFunction (a, b);* / # include”墨西哥人。hpp mexAdapter.hpp“# includeusing namespace matlab::data; using matlab::mex::ArgumentList; class MexFunction : public matlab::mex::Function { public: void operator()(ArgumentList outputs, ArgumentList inputs) { checkArguments(outputs, inputs); const double offSet = inputs[0][0]; TypedArray doubleArray = std::move(inputs[1]); for (auto& elem : doubleArray) { elem += offSet; } outputs[0] = doubleArray; } void checkArguments(ArgumentList outputs, ArgumentList inputs) {/ /获取指针引擎std::要查看< matlab::引擎::MATLABEngine > matlabPtr = getEngine ();/ /获取数组工厂ArrayFactory工厂;/ /检查第一个输入参数如果(输入[0]. gettype () ! = ArrayType::双| |输入[0]. gettype () = = ArrayType:: COMPLEX_DOUBLE | |输入[0].getNumberOfElements () ! = 1) {matlabPtr - >函数宏指令(u“错误”,0,std::向量<数组>({工厂。createScalar(“第一输入必须标量双”)}));}/ /检查第二个输入参数如果(输入[1]. gettype () ! = ArrayType::双| |输入[1]. gettype () = = ArrayType:: COMPLEX_DOUBLE) {matlabPtr - >函数宏指令(u“错误”,0,std::向量<数组>({工厂。createScalar(输入必须双数组)}));}/ /检查数量的输出如果(outputs.size () > 1) {matlabPtr - >函数宏指令(u“错误”,0,std::向量数组< >({工厂。createScalar(“只有一个输出返回”)}));}}};

设置和构建

安装编译器支持后,使用万博1manbetx墨西哥人命令来建立你的墨西哥人的功能。

墨西哥人设置c++墨西哥人MyMEXFunction.cpp

建立墨西哥人功能的更多信息,见构建c++墨西哥人项目

调用墨西哥人函数

打电话给你的墨西哥人从MATLAB函数。

b = MyMEXFunction(11.5兰特(1000));

另请参阅

||

相关的话题