How to send std::map from Mex function back to Matlab?

3 visualizzazioni (ultimi 30 giorni)
class MexFunction : public matlab::mex::Function {
public:
void operator()(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs)
{
ArrayFactory factory;
std::map<int, std::string > test_map {
{1, "Bla-bla"},
{2, "cla-cla"},
{3, "dla-dla"},
};
outputs[0] = ... // how to pass back test_map?
}
};

Risposte (1)

Rishav
Rishav il 27 Feb 2024
Hi Rakesh,
To send a std::map from a Mex function back to MATLAB, it needs to be converted into a MATLAB data type that MATLAB can understand.
Here is the updated code to do the same:
class MexFunction : public matlab::mex::Function {
public:
void operator()(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs) {
matlab::data::ArrayFactory factory;
std::map<int, std::string> test_map {
{1, "Bla-bla"},
{2, "cla-cla"},
{3, "dla-dla"},
};
// Convert std::map to MATLAB cell array
matlab::data::CellArray cellArray = factory.createCellArray({1, test_map.size()});
int idx = 0;
for (const auto& pair : test_map) {
cellArray[idx++] = factory.createCharArray(pair.second.c_str());
}
// Assign the MATLAB cell array to the output
outputs[0] = cellArray;
}
};
Also, make sure to include the appropriate headers for the MATLAB Data API.

Categorie

Scopri di più su Testing Frameworks in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by