有没有办法从MATLAB mex文件中的映射中获取值?
我有一个函数,我正在编写一个MatlabMex文件。这个函数必须使用MEX,因为它与C++中的一个硬件接口。有很多选项可以设置,我想使用有没有办法从MATLAB mex文件中的映射中获取值?,matlab,mex,Matlab,Mex,我有一个函数,我正在编写一个MatlabMex文件。这个函数必须使用MEX,因为它与C++中的一个硬件接口。有很多选项可以设置,我想使用containers.Map传递它们。(否则,我需要大量的函数参数。) 我看不到任何访问使用键检索值的映射运算符的方法。我尝试使用mexCallMATLAB,但我的各种方法都失败了。有办法做到这一点吗 我想Map可能使用subsref实现了这个操作符,但在MATLAB中失败了,所以我猜mex文件中的等价物也会失败: dict = containers.Map('
containers.Map
传递它们。(否则,我需要大量的函数参数。)
我看不到任何访问使用键检索值的映射运算符的方法。我尝试使用mexCallMATLAB
,但我的各种方法都失败了。有办法做到这一点吗
我想Map可能使用subsref
实现了这个操作符,但在MATLAB中失败了,所以我猜mex文件中的等价物也会失败:
dict = containers.Map('foo', 3)
subsref(dict, struct('type', '.', 'subs', 'foo'))
您在
subsref
中使用了错误的'type'
-请改用'()'
,因为您是在容器中使用()
符号来访问值的。Map
,而不是在结构中使用点符号)。以下方法有效:
dict = containers.Map('foo', 3);
subsref(dict, struct('type', '()', 'subs', 'foo'))
ans =
3
另外,我不确定是否使用
容器。Map
是最好的方法。如果您创建显式setter方法,您的C++
代码将更加干净。如果有太多的属性,可能会有帮助。请投票给@nirvana msu,让我走上正轨。另外,感谢@horchler建议使用struct
是一个更好的主意。下面是如何访问一个<代码>容器。在C++中用一个字段命名为<代码> fo>代码>:
#包括
void MEX函数(整数nlhs,mxArray*plhs[],
整数nrhs,常量mxArray*prhs[]{
mxArray*args[2];
args[0]=const_cast(prhs[0]);
常量字符**字段=(常量字符**)mxCalloc(2,sizeof(*字段));
字段[0]=“类型”;
字段[1]=“subs”;
args[1]=mxCreateStructMatrix(1,1,2,字段);
auto typeStr=mxCreateString(“”);
mxSetField(args[1],0,“type”,typeStr);
自动映射键=mxCreateString(“foo”);
mxSetField(args[1],0,“subs”,mapKey);
MX阵列*输出;
mexCallMATLAB(1,&output,2,args,“subsref”);
mexPrintf(“%f\n”,mxGetScalar(输出));
MX阵列(args[1]);
mxFree(字段);
}
您可以只使用结构吗?然后你可以使用mxGetField
和其他相关函数。也许-我现在正在研究这个问题。是的-这对我很有用。谢谢我想我会把这个问题留着,因为有人可能仍然想要一个关于地图的答案。太好了。如果您对问题进行了编辑,以提供一个简单的示例,说明您正在尝试做什么(我不清楚您为什么需要使用subindex
),这会有所帮助。您也可以为您的属性创建单独的setter方法和/或使用生成器设计模式。这在Matlab并不常见,但这通常是如何在C++等语言中完成的。