Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法从MATLAB mex文件中的映射中获取值?_Matlab_Mex - Fatal编程技术网

有没有办法从MATLAB mex文件中的映射中获取值?

有没有办法从MATLAB mex文件中的映射中获取值?,matlab,mex,Matlab,Mex,我有一个函数,我正在编写一个MatlabMex文件。这个函数必须使用MEX,因为它与C++中的一个硬件接口。有很多选项可以设置,我想使用containers.Map传递它们。(否则,我需要大量的函数参数。) 我看不到任何访问使用键检索值的映射运算符的方法。我尝试使用mexCallMATLAB,但我的各种方法都失败了。有办法做到这一点吗 我想Map可能使用subsref实现了这个操作符,但在MATLAB中失败了,所以我猜mex文件中的等价物也会失败: dict = containers.Map('

我有一个函数,我正在编写一个MatlabMex文件。这个函数必须使用MEX,因为它与C++中的一个硬件接口。有很多选项可以设置,我想使用
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++等语言中完成的。