MATLAB Language Verifique el número de entradas / salidas en un archivo MEX de C ++


Ejemplo

En este ejemplo, escribiremos un programa básico que verifique el número de entradas y salidas pasadas a una función MEX.

Como punto de partida, necesitamos crear un archivo C ++ que implemente la "puerta de enlace MEX". Esta es la función que se ejecuta cuando se llama el archivo desde MATLAB.

testinputs.cpp

// MathWorks provided header file
#include "mex.h"

// gateway function
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
    // This function will error if number of inputs its not 3 or 4
    // This function will error if number of outputs is more than 1

    // Check inputs:
    if (nrhs < 3 || nrhs > 4) {
        mexErrMsgIdAndTxt("Testinputs:ErrorIdIn",
            "Invalid number of inputs to MEX file.");
    }

    // Check outputs:
    if (nlhs > 1) {
        mexErrMsgIdAndTxt("Testinputs:ErrorIdOut",
                "Invalid number of outputs to MEX file.");
    }
}

Primero, incluimos el encabezado mex.h que contiene definiciones de todas las funciones y tipos de datos necesarios para trabajar con la API de MEX. Luego implementamos la función mexFunction como se muestra, donde su firma no debe cambiar, independientemente de las entradas / salidas realmente utilizadas. Los parámetros de la función son los siguientes:

  • nlhs : Número de salidas solicitadas.
  • *plhs[] : Array que contiene todas las salidas en formato de API MEX.
  • nrhs : Número de entradas pasadas.
  • *prhs[] : Array que contiene todas las entradas en formato MEX API.

A continuación, verificamos el número de argumentos de entradas / salidas, y si la validación falla, se produce un error utilizando la función mexErrMsgIdAndTxt (se espera un nombre somename:iD identificador de formato somename:iD , una simple "ID" no funcionará).


Una vez que el archivo se compila como mex testinputs.cpp , se puede llamar a la función en MATLAB como:

>> testinputs(2,3)
Error using testinputs. Invalid number of inputs to MEX file.

>> testinputs(2,3,5)

>> [~,~] = testinputs(2,3,3)
Error using testinputs. Invalid number of outputs to MEX file.