Mostrar una salida en la ventana de comandos de MATLAB
Las funciones MEX pueden mostrar una salida en la ventana de comandos de MATLAB®. Sin embargo, algunos compiladores no admiten el uso de std::cout
en funciones MEX. Otro método es utilizar std::ostringstream
y la función fprintf
de MATLAB para mostrar texto en la ventana de comandos de MATLAB.
La siguiente función MEX devuelve simplemente el texto y los valores numéricos que se pasan a la función como entradas. Se asume que los argumentos son un valor char
y double
. Para simplificar el proceso, se omite la comprobación de errores.
Después, se explica cómo la función MEX muestra texto en la ventana de comandos de MATLAB:
Cree una instancia de
std::ostringstream
llamadastream
.Inserte los datos que desea mostrar en
stream
.Llame a
displayOnMATLAB
con el objetostream
.
La función de miembro displayOnMATLAB
pasa los contenidos de la secuencia a fprintf
y, después, borra el buffer de la secuencia. Puede reutilizar el objeto stream
para las siguientes llamadas a displayOnMATLAB
.
#include "mex.hpp"
#include "mexAdapter.hpp"
using matlab::mex::ArgumentList;
using namespace matlab::data;
class MexFunction : public matlab::mex::Function {
// Pointer to MATLAB engine to call fprintf
std::shared_ptr<matlab::engine::MATLABEngine> matlabPtr = getEngine();
// Factory to create MATLAB data arrays
ArrayFactory factory;
// Create an output stream
std::ostringstream stream;
public:
void operator()(ArgumentList outputs, ArgumentList inputs) {
const CharArray name = inputs[0];
const TypedArray<double> number = inputs[1];
stream << "Here is the name/value pair that you entered." << std::endl;
displayOnMATLAB(stream);
stream << name.toAscii() << ": " << double(number[0]) << std::endl;
displayOnMATLAB(stream);
}
void displayOnMATLAB(std::ostringstream& stream) {
// Pass stream content to MATLAB fprintf function
matlabPtr->feval(u"fprintf", 0,
std::vector<Array>({ factory.createScalar(stream.str()) }));
// Clear stream buffer
stream.str("");
}
};
Llamar a la función MEX (denominada streamOutput.cpp
en este ejemplo) desde MATLAB produce el siguiente resultado.
mex streamOutput.cpp streamOutput('Total',153)
Here is the name/value pair that you entered. Total: 153
Consulte también
feval | matlab::data::ArrayFactory