通過欄位名稱傳遞結構

此示例說明如何從 MATLAB 讀取各種型別的結構條目,並將其傳遞給 C 等效型別變數。

雖然從示例中可以很容易地找出如何通過數字載入欄位,但是這裡通過將欄位名稱與字串進行比較來實現。因此,struct 欄位可以通過它們的欄位名來定址,其中的變數可以由 C 讀取。

structIn.c

#include "mex.h"
#include <string.h> // strcmp

void mexFunction (int nlhs, mxArray *plhs[],
                  int nrhs, const mxArray *prhs[])
{
  // helpers
  double* double_ptr;
  unsigned int i; // loop variable
  
  // to be read variables
  bool optimal;
  int randomseed;
  unsigned int desiredNodes;

  if (!mxIsStruct(prhs[0])) {
    mexErrMsgTxt("First argument has to be a parameter struct!");
  }
  for (i=0; i<mxGetNumberOfFields(prhs[0]); i++) {
    if (0==strcmp(mxGetFieldNameByNumber(prhs[0],i),"randomseed")) {
      mxArray *p = mxGetFieldByNumber(prhs[0],0,i);
      randomseed = *mxGetPr(p);
    }
    if (0==strcmp(mxGetFieldNameByNumber(prhs[0],i),"optimal")) {
      mxArray *p = mxGetFieldByNumber(prhs[0],0,i);
      optimal = (bool)*mxGetPr(p);
    }
    if (0==strcmp(mxGetFieldNameByNumber(prhs[0],i),"numNodes")) {
      mxArray *p = mxGetFieldByNumber(prhs[0],0,i);
      desiredNodes = *mxGetPr(p);
    }
  }
}

i 上的迴圈遍歷給定結構中的每個欄位,而 if(0==strcmp)-parts 將 matlab 欄位的名稱與給定字串進行比較。如果匹配,則將相應的值提取到 C 變數。