主要内容

从C ++创建结构阵列

马铃薯®结构包含使用字段名称引用的数据。每个字段都可以包含任何类型的数据。要访问结构中的数据,Matlab代码使用表单的点表示structname.fieldname.。Matlab结构的类是塑造

在一系列MATLAB结构中,每个结构必须具有相同的字段名称。

有关如何设置和构建C ++引擎程序的信息,请参阅构建C ++引擎程序

创建结构阵列并发送至马铃薯

此示例代码创建一个结构数组并将其放在Matlab工作区中。

以下是如何创建和发送阵列。

#include“matlabdataArray.hpp”#include“matlabengine.hpp”#include 
void putstructarray(){使用命名空间matlab ::引擎;//连接到名为shared matlab会话,开始为:// matlab -r“matlab.eengine.shareengine('mymatlabengine')”字符串会话(U“mymatlabengine”);std :: unique_ptr  matlabptr = connectmatlab(会话);//创建MATLAB数据阵列Factory MATLAB :: DATA :: ArrayFactory Factory;//定义2元素结构阵列,每个结构matlab :: data :: structarray structarray = factory.createStructarray({1,2},{“F1”,“F2”});//将值分配给First StructarArray中的每个字段[0] [“f1”] = factory.createCharArray(“第一个数据集”);structarray [0] [“f2”] = factory.createArray ({1,3},{1,2,3});//将值分配给第二结构结构中的每个字段[1] [“f1”] = factory.createCharArray(“第二数据集”);structarray [1] [“f2”] = factory.createArray ({1,5},{4.,5.,6.,8.});//将struct array放在matlab workspace matlabptr-> setvariable(U“structarray”,structarray); }

获得结构马铃薯

使用Matlab Workspace使用Matlab Workspace使用的结构变量Matlab :: Engine :: MatlabengineGetVariable.成员函数。

笔记

此示例代码从MATLAB工作区获取一个结构数组。此代码假定有一个名为的结构数组变量structarray.在Matlab工作区中,就像在前面的示例中创建的工作区一样。将结构数组传递给MATLAB,参见创建结构数组并发送到MATLAB

#include“matlabdataArray.hpp”#include“matlabengine.hpp”
void readstructarray(){使用命名空间matlab ::引擎;//连接到名为shared matlab会话,开始为:// matlab -r“matlab.eengine.shareengine('mymatlabengine')”字符串会话(U“mymatlabengine”);std :: unique_ptr  matlabptr = connectmatlab(会话);//从matlab matlab :: data :: structarray matlabstruct = matlabptr-> getVariable(U“Structarray”);}

访问结构阵列数据

有不同的方法可以在C ++中访问结构:

  • 创建对特定字段的引用。对引用的更改修改结构中的值。

  • 创建字段值的副本。除非将值重新分配到结构字段,否则对副本的更改不会修改结构中的值。

要获取有关结构阵列的信息,请使用matlab :: data :: structarray会员职能呕吐getnumberoffields., 和getfieldnames.

此示例代码遵循以下步骤:

  • 获取名为的结构数组变量structarray.来自Matlab会议。

  • 创建对其中一个结构字段的引用。

  • 使用参考来修改现场中包含的双数组的元素。

  • 将修改后的结构阵列返回到共享MATLAB会话。

此示例代码从上一节中创建的共享MATLAB会话中获取结构数组,创建结构数组并发送到MATLAB

#include“matlabdataArray.hpp”#include“matlabengine.hpp”#include 
void modifystructarray(){使用命名空间matlab ::引擎;//连接到名为shared matlab会话,开始为:// matlab -r“matlab.eengine.shareengine('mymatlabengine')”字符串会话(U“mymatlabengine”);std :: unique_ptr  matlabptr = connectmatlab(会话);//创建MATLAB数据阵列Factory MATLAB :: DATA :: ArrayFactory Factory;//从matlab matlab :: data :: structarray matlabstruct = matlabptr-> getVariable(U“Structarray”);matlab :: data :: ArrayDimensions Dims = Matlabstruct.getDimensions();std :: cout <<“strationArray大小是:”<< dims [1] << std :: endl的“<< dims [0]”;//获取字段的数量size_t numfields = matlabstruct.getnumberOffields();std :: cout <<“structarray有”<< numfields <<“字段”<< std :: endl;//获取struct array resionnames范围<转发器,matlabfield identifier const>字段= matlabstruct.getfieldnames(); std::vector fieldNames; for (const auto& name : fields) { fieldNames.push_back(name); } // Change value of array element using a reference matlab::data::TypedArrayRef field1 = matlabStruct[1][fieldNames[1]]; field1[0] = -200.; // Return modified struct array to MATLAB matlabPtr->setVariable(u"structArray", matlabStruct); }

也可以看看

|||

相关话题