Upvote for @ nirvana-msu让我走上正轨。此外,感谢@horchler建议,使用struct
而不是一个更好的主意。下面介绍如何在C访问containers.Map
++做一个在MATLAB与一个名为foo
后场:
#include <mex.h>
void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[]) {
mxArray *args[2];
args[0] = const_cast<mxArray*>(prhs[0]);
const char **fields = (const char **) mxCalloc(2, sizeof(*fields));
fields[0] = "type";
fields[1] = "subs";
args[1] = mxCreateStructMatrix(1, 1, 2, fields);
auto typeStr = mxCreateString("()");
mxSetField(args[1], 0, "type", typeStr);
auto mapKey = mxCreateString("foo");
mxSetField(args[1], 0, "subs", mapKey);
mxArray *output;
mexCallMATLAB(1, &output, 2, args, "subsref");
mexPrintf("%f\n", mxGetScalar(output));
mxDestroyArray(args[1]);
mxFree(fields);
}
你能只使用一个结构?然后你可以使用'mxGetField'和其他相关函数。 – horchler
也许 - 我正在研究这个。 –
是的 - 这对我很有用。谢谢!不过,我想我会把这个问题公开,因为有人可能仍然想要一个关于地图的答案。 –