Main Content

Funciones de llamada de funciones MEXMATLAB

Funciones de llamada de funciones MEX utilizando la función. le permite pasar argumentos de funciones MEX a funciones y devolver los resultados a la función MEX.MATLAB®matlab::engine::MATLABEngine::fevalfevalMATLAB

Los siguientes fragmentos de código requieren estas definiciones para usar el y el.matlab::data::ArrayFactoryAPI del motor de C++

matlab::data::ArrayFactory factory; std::shared_ptr<matlab::engine::MATLABEngine> matlabPtr = getEngine();

Salida única

Este ejemplo llama a la función con las siguientes entradas:MATLABsqrt

  • La función, nombre pasado como una cadena UTF16

  • Las entradas de la función, especificadas como unsqrtmatlab::data::Array

El valor devuelto a la función MEX es un cuatro elementos que contiene cuatro valores para la raíz cuadrada de la matriz de entrada.matlab::data::Array

En el ejemplo se mueve el valor devuelto a a, que proporciona iteradores utilizados en el bucle basado en intervalo que crea una matriz de tipo a partir de los resultados devueltos por la función.matlab::data::TypedArrayfordoubleMATLABsqrt

// Define input and output arguments
matlab::data::Array args({
    factory.createArray<double>({ 1, 4 },{ 1, 2, 3, 4 }) });
matlab::data::Array result;
 // Call feval and return 1 argument
result = matlabPtr->feval(u"sqrt", args);
matlab::data::TypedArray<double> returnedValues(std::move(result));
 // Create native array
double dataArray[4];
int i = 0;
for (auto elem : returnedValues) {
    dataArray[i] = elem;
    i++;
}

Múltiples salidas

Algunas funciones devuelven diferentes números de salidas en función de cómo se llame a la función.MATLAB Puede especificar el número de argumentos devueltos al llamar a una función desde una función MEX.MATLAB

Este código llama a la función con las siguientes entradas:MATLABgcd

  • El nombre de la función pasa como una cadena UTF16

  • Número de salidas devueltas por la función, especificadas como a.MATLABconst size_t

  • Las entradas de la función, especificadas como una de los elementos.gcdstd::vectormatlab::data::Array

El valor devuelto es un elemento que contiene tres elementos.std::vectormatlab::data::Array

// Define arguments
std::vector<matlab::data::Array> args({
    factory.createScalar<int16_t>(30),
    factory.createScalar<int16_t>(56)});
const size_t numReturned = 3;
std::vector<matlab::data::Array> result;

// Call feval and return 3 arguments
result = matlabPtr->feval(u"gcd", numReturned, args);

Consulte también

Temas relacionados