Anzeigen der Ausgabe im MATLAB-Befehlsfenster
MEX-Funktionen können die Ausgabe im MATLAB®-Befehlsfenster anzeigen. Einige Compiler unterstützen jedoch nicht die Verwendung von std::cout in MEX-Funktionen. Ein weiterer Ansatz besteht darin, std::ostringstream und die MATLAB fprintf-Funktion zu verwenden, um Text im MATLAB-Befehlsfenster anzuzeigen.
Die folgende MEX-Funktion gibt einfach die Textwerte und numerischen Werte zurück, die der Funktion als Eingaben übergeben werden. Diese Argumente werden als char und double interpretiert. Auf eine Fehlerprüfung wird aus Gründen der Einfachheit verzichtet.
Die MEX-Funktion zeigt Text folgendermaßen im MATLAB-Befehlsfenster an:
Erstellen Sie eine
std::ostringstream-Instanz namensstream.Fügen Sie die anzuzeigenden Daten in
streamein.Rufen Sie
displayOnMATLABmit dem Objektstreamauf.
Die Memberfunktion displayOnMATLAB übergibt den Inhalt des Streams an fprintf und löscht daraufhin den Streampuffer. Sie können das stream-Objekt für folgende Aufrufe von displayOnMATLAB wiederverwenden.
#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("");
}
};Wenn Sie die MEX-Funktion (in diesem Beispiel streamOutput.cpp) über MATLAB aufrufen, wird das folgende Ergebnis erzeugt.
mex streamOutput.cpp streamOutput('Total',153)
Here is the name/value pair that you entered. Total: 153
Siehe auch
feval | matlab::data::ArrayFactory