我使用的mxCreateNumericMatrix功能:我MEX文件確定mwSize的mxClassID在MEX文件
mxArray *mxCreateNumericMatrix(mwSize m, mwSize n, mxClassID classid, mxComplexity ComplexFlag);
我想型mwSize的陣列。 爲此我需要確定是否使用mxUINT32_CLASS或mxUINT64_CLASS as classid。
我可以在運行時使用if語句在sizeof(mwSize)上確定它,但有沒有更優雅的方法來確定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給出了一般情況下可用的最佳選擇。
是否使用C或C++? – Praetorian
@Praetorian我正在使用** C ** – ip84
在這種情況下,您在編譯時確定32/64位的最佳選擇是使用宏。也許'#if SIZE_MAX == UINT64_MAX'將起作用 – Praetorian