Effacer les filtres
Effacer les filtres

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

4 vues (au cours des 30 derniers jours)
Rakesh Sadhu
Rakesh Sadhu le 15 Oct 2021
Réponse apportée : Rishav le 27 Fév 2024
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?
}
};

Réponses (1)

Rishav
Rishav le 27 Fév 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.

Catégories

En savoir plus sur Testing Frameworks dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by