主要内容

用c++创建结构数组

MATLAB®结构包含使用字段名引用的数据。每个字段可以包含任何类型的数据。为了访问结构中的数据,MATLAB代码使用了形式的点表示法structName.fieldName.本类的一个结构是MATLAB结构体

在MATLAB结构的数组中,每个结构必须具有相同的字段名。

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

创建结构数组和发送到MATLAB

这个示例代码创建了一个结构数组,并将其放入MATLAB工作区中。

下面是如何创建和发送数组。

#include " dataarray .hpp" #include " dataarray .hpp" #include " dataarray .hpp" #include " dataarray .hpp
void putStructArray(){使用命名空间matlab::engine;//连接到命名的共享MATLAB会话启动为:// MATLAB -r " MATLAB .engine. shareengine ('myMatlabEngine')"字符串会话(u“myMatlabEngine”);std::unique_ptr matlabPtr = connectMATLAB(session);//创建MATLAB数据数组工厂MATLAB::data::ArrayFactory工厂;//定义两个元素的struct数组,每个struct有两个字段createStructArray({1, 2}, {"f1", "f2"});//给第一个struct structArray[0]["f1"] = factory中的每个字段赋值。createCharArray(“第一数据集”);structArray[0][“f2”]=工厂。createArray({1, 3}, {1, 2, 3});//给第二个struct中的每个字段赋值structArray[1]["f1"] = factory。createCharArray(“第二数据集”); structArray[1]["f2"] = factory.createArray({ 1, 5 }, { 4., 5., 6., 7., 8. }); // Put struct array in MATLAB workspace matlabPtr->setVariable(u"structArray", structArray); }

得到结构MATLAB

从MATLAB工作空间中得到一个结构变量matlab:引擎::MATLABEnginegetVariable成员函数。

请注意

这个示例代码从MATLAB工作空间获得一个结构数组。这段代码假设有一个名为structArray,就像在前面的例子中创建的那样。要将结构数组传递给MATLAB,请参见创建结构数组并发送到MATLAB

#include "MatlabDataArray.hpp" #include "MatlabEngine.hpp" #include "MatlabEngine.hpp"
void readStructArray(){使用命名空间matlab::engine;//连接到命名的共享MATLAB会话启动为:// MATLAB -r " MATLAB .engine. shareengine ('myMatlabEngine')"字符串会话(u“myMatlabEngine”);std::unique_ptr matlabPtr = connectMATLAB(session);//从MATLAB中获取struct数组MATLAB::data::StructArray matlabStruct = matlabPtr->getVariable(u" StructArray ");}

访问结构数组数据

在c++中有不同的访问结构的方法:

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

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

要获取有关结构数组的信息,请使用matlab:: data:: StructArray成员函数getDimensionsgetNumberOfFields,getFieldNames

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

  • 获取命名的结构数组变量structArray来自MATLAB会话。

  • 创建对结构字段之一的引用。

  • 使用引用修改包含在字段中的双数组元素。

  • 将修改后的结构数组返回给共享的MATLAB会话。

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

#include " dataarray .hpp" #include " dataarray .hpp" #include " dataarray .hpp" #include " dataarray .hpp
void modifyStructArray(){使用命名空间matlab::engine;//连接到命名的共享MATLAB会话启动为:// MATLAB -r " MATLAB .engine. shareengine ('myMatlabEngine')"字符串会话(u“myMatlabEngine”);std::unique_ptr matlabPtr = connectMATLAB(session);//创建MATLAB数据数组工厂MATLAB::data::ArrayFactory工厂;//从MATLAB中获取struct数组MATLAB::data::StructArray matlabStruct = matlabPtr->getVariable(u" StructArray ");matlab::data::ArrayDimensions dim = matlabStruct.getDimensions();std::cout << "structArray size is: " << dims[0] << " by " << dims[1] << std::endl;//获取字段数size_t numFields = matlabstruct . getnumberfields ();std::cout << "structArray has " << numFields << " fields" << std::endl; // Get the struct array fieldnames Range fields = 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); }

另请参阅

|||

相关的话题