Convert Matlab struct into custom C++ type with C++ Mex API
22 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Friedrich
am 25 Okt. 2024
Bearbeitet: 埃博拉酱
am 28 Okt. 2024 um 12:01
I am trying to mex a custom C++ code file but am struggeling in how to convert the Matlab-Inputs into whatever type I need for my C++ Code.
Let's assume I have a Matlab struct like this
u = struct(test1 = 5, test2 = 10, test3 = struct(test4 = 1:10))
As u see I have a nested struct with an array inside. Now, in the C++ Mex API I need to read all values of the above struct. How do I do this? I tried indexing into the inputs of the operator() method
void operator()(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs)
however, that way I could only retrieve the number of inputs but not their numerical contents.
I guess I have to do something like
matlab::data::TypedArray<Struct> in0 = std::move(inputs[0]);
to get to the values but that alone doesn't help me. How do I proceed?
0 Kommentare
Akzeptierte Antwort
埃博拉酱
am 25 Okt. 2024
Bearbeitet: 埃博拉酱
am 28 Okt. 2024 um 11:59
Usually you should move-construct a StructArray from inputs[0] and index into it to get a Struct element, which can be then indexed with a fieldname as a C++ string to get a generic Array, with which you can then move-construct a TypedArray of correct type (get its real runtime type with Array::GetType if you can't ensure it at coding time). Finally you should usually index into that TypedArray to get a numeric element, get an iterator like cbegin/begin, or release it as a buffer_ptr_t to get a C++ native pointer.
void Example(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs)
{
matlab::data::TypedArray<double> A = matlab::data::StructArray(matlab::data::StructArray(std::move(inputs[0]))[0]["test3"].operator matlab::data::Array())[0]["test4"];
A.cbegin();//Get an iterator
A[0];//Get a double element
const matlab::data::buffer_ptr_t<double> B = A.release();//After this, A becomes invalid
B.get();//Get a native pointer
}
20241028:Edited for forgetting to provide a type to the buffer_ptr_t
2 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Write C++ Functions Callable from MATLAB (MEX Files) finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!