主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

c++からの構造体配列の作成

MATLAB®構造体には,フィールド名で参照するデータが含まれています。各フィールドには任意のデータ型を含めることができます。MATLABコードは,structName.fieldNameの形式のドット表記を使用して構造体内のデータにアクセスします。MATLAB構造体のクラスは结构体です。

MATLAB構造体の配列では,各構造体は同じフィールド名をもっていなければなりません。

c++エンジンプログラムを設定およびビルドする方法の詳細については,c++エンジンプログラムのビルドを参照してください。

構造体配列の作成とMATLABへの送信

このサンプルコードは,構造体配列を作成してMATLABワークスペースに配置します。

配列を作成して送信する方法は次のとおりです。

  • 空のmatlab:: data:: StructArrayを作成し,配列の次元とフィールド名を定義します。

  • 配列とフィールド名のインデックスを使用してフィールドに値を代入します。matlab:: data:: ArrayFactoryを使用して正しい配列型を定義します。

  • メンバー関数MATLABEngine: setVariableを使用して,構造体配列をMATLABワークスペースに配置します。

#include "MatlabEngine.hpp" #include 
void putStructArray(){使用命名空间matlab::引擎;//连接到命名的共享MATLAB会话开始:// MATLAB -r " MATLAB .engine. shareengine ('myMatlabEngine')"字符串会话(u“myMatlabEngine”);std::unique_ptr matlabPtr = connectMATLAB(session);//创建MATLAB数据数组工厂MATLAB::data::ArrayFactory工厂;//定义2元素的结构数组,每个结构有两个字段matlab::data::StructArray StructArray = factory。createStructArray({1, 2}, {"f1", "f2"});//给第一个struct structArray[0]["f1"] = factory中的每个字段赋值。createCharArray(“第一数据集”);structArray[0][“f2”]=工厂。creatarray ({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:引擎::MATLABEngineのメンバー関数getVariableを使用して,MATLABワークスペースから構造体変数を取得します。

メモ

このサンプルコードは,MATLABワークスペースから構造体配列を取得します。このコードは,前の例で作成されたようなstructArrayという名前の構造体配列変数がMATLABワークスペースにあると仮定します。構造体配列をMATLABに渡す方法については,構造体配列の作成とMATLABへの送信を参照してください。

#include "MatlabEngine.hpp" #include "MatlabEngine.hpp"
void readStructArray(){使用命名空间matlab::引擎;//连接到命名的共享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を使用します。

このサンプルコードは次の手順に従います。

  • MATLABセッションからstructArrayという名前の構造体配列変数を取得します。

  • 構造体フィールドのいずれかへの参照を作成します。

  • 参照を使用してフィールドに含まれる双の配列の要素を変更します。

  • 変更された構造体配列を共有MATLABセッションに返します。

このサンプルコードは,前の節構造体配列の作成とMATLABへの送信で作成した共有MATLABセッションから構造体配列を取得します。

#include "MatlabEngine.hpp" #include 
void modifyStructArray(){使用命名空间matlab::引擎;//连接到命名的共享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昏暗= 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); }

参考

|||

関連するトピック