How to send std::map from Mex function back to Matlab?
    3 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
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?
    }
};
0 commentaires
Réponses (1)
  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.
0 commentaires
Voir également
Catégories
				En savoir plus sur Call C++ from MATLAB 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!

