Main Content

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.

A continuación se explica cómo la función MEX muestra texto en la ventana de comandos de MATLAB:

  • Cree una instancia de std::ostringstream llamada stream.

  • Inserte los datos que desea mostrar en stream.

  • Llame a displayOnMATLAB con el objeto stream.

La función de miembro displayOnMATLAB pasa los contenidos de stream a fprintf y, a continuación, borra el buffer de stream. 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

|

Temas relacionados