MathWorks erlaubt derzeit nicht, cout aus einer mex-Datei zu verwenden, wenn der MATLAB-Desktop geöffnet ist, da sie stdout umgeleitet haben. Ihre aktuelle Problemumgehung bietet eine Funktion mexPrintf, die Sie stattdessen anfordern . Nachdem ich etwas gegoogelt habe, denke ich, dass es möglich ist, die Klasse std :: stringbuf zu erweitern, um das zu tun, was ich brauche. Hier ist, was ich bisher habe. Ist das robust genug oder gibt es andere Methoden, die ich überlasten muss oder einen besseren Weg, dies zu tun? (Suche nach Portabilität in einer allgemeinen UNIX-Umgebung und der Fähigkeit, std :: cout als normal zu verwenden, wenn dieser Code nicht mit einer ausführbaren mex-Datei verknüpft ist)
%Vor%Sie wollen std :: stringbuf nicht wirklich überladen, wenn Sie std :: streambuf oder std :: basic_streambuf überladen möchten (wenn Sie mehrere Zeichentypen unterstützen wollen), müssen Sie auch die Überlaufmethode außer Kraft setzen .
Aber ich denke auch, dass Sie Ihre Lösung für Ihr Problem überdenken müssen.
cout ist nur ein Ostream. Wenn also alle Klassen / Funktionen einen Ostream erhalten, können Sie alles einfügen, was Ihnen gefällt. z.B. cout, ofstream, usw.
Wenn das zu schwer ist, würde ich meine eigene Version von cout erstellen, vielleicht mycout genannt, die entweder zur Compilerzeit oder zur Laufzeit definiert werden kann (je nachdem, was Sie tun wollen).
Eine einfache Lösung könnte sein:
%Vor%Und die Cout-Version könnte einfach sein:
%Vor%Eine Laufzeitversion ist ein bisschen mehr Arbeit, aber leicht machbar.
Ich habe die endgültige Implementierung des OP ein wenig geändert und einen Konstruktor und einen Destruktor hinzugefügt. Das Erstellen eines Objekts dieser Klasse ersetzt automatisch den Stream-Puffer in std::cout
. Wenn das Objekt den Gültigkeitsbereich verlässt, wird der ursprüngliche Stream-Puffer wiederhergestellt. RAII!
Um den Stream-Puffer in einer MEX-Datei zu verwenden, einfach:
%Vor%... und mach dir keine Sorgen darüber, etwas zu vergessen.
Tags und Links c++ matlab cout mex stringbuffer