我在我的 mex 文件中使用 mxCreateNumericMatrix 函数:
mxArray *mxCreateNumericMatrix(mwSize m, mwSize n, mxClassID classid, mxComplexity ComplexFlag);
我想获得mwSize类型的数组。为此,我需要确定是否使用mxUINT32_CLASS或mxUINT64_CLASS作为classid。
我可以在运行时使用sizeof(mwSize)上的 if 语句来确定它,但是有没有更优雅的方法来确定 mwSize 的类 ID?也许有些定义取决于具有一个值或另一个值的系统?
只是审美问题。
顺便说一句,在 Fortran 有一个函数 mxClassIDFromClassName: http: //www.mathworks.com/help/matlab/apiref/mxclassidfromclassname.html
使用 mwSize 是出于其他原因,因此 mxCreateDoubleMatrix 函数将是可移植的。如果 mxCreateNumericMatrix 不存在优雅的解决方案,这很奇怪。
编辑:
正如@Praetorian 解释的那样,就我而言,我没有理由使用适合系统的类型(32 位或 64 位),因为我特别喜欢它是 64 位整数数组,我也可以在 32-位系统。
但另一方面,我也想将两个索引返回到我返回的数组中。就我而言,我知道数组本身很短,uint16_T
无论如何我都会使用,但如果我想让它适合mwIndex
,我将不得不使用一些宏(@Amro 建议了一些好的选项),因为显然没有函数至于mxCreateDoubleMatrix
整数(适合系统)。
总而言之,@Praetorian 在下面的评论中帮助了我的案例,@Amro 可能为一般案例提供了最好的选择。