Hi,
ich möchtel std::clog umleiten, so dass ich die Inhalte (wahlweise) in eine Logfile schreiben oder in einer GUI ausgeben kann. Mit freopen könnte ich den Stream in eine Datei lenken - nur fehlt mir dann eben die Möglichkeit die Sachen optional in meiner GUI auszugeben ^^
Welche Möglichkeiten habe ich?
Danke im Voraus ^^
LG Glocke
std::clog umleiten
std::clog umleiten
Rage - ein "modernes" Rogue-like (C++11, SFML)
Re: std::clog umleiten
Stream-Objekte lassen sich kopieren 
Mit einem Parameter aufgerufen, schreibt das Progrämmchen in eine Datei mit entsprechendem Namen, sonst auf eine Kopie von std::clog

Code: Alles auswählen
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
ofstream out;
if (argc > 1)
out.open(argv[1]);
else {
out.copyfmt(clog);
out.clear(clog.rdstate());
out.basic_ios<char>::rdbuf(clog.rdbuf());
}
out << "Hallo" << std::endl;
}
It's as simple as that. And remember, Beethoven wrote his first symphony in C.
Re: std::clog umleiten
Danke für deine Antwort!
Nur habe ich dann die Möglichkeit entweder in eine Datei- oder auf die GUI zu schreiben. Ich bin vorhin über folgende Lösungsidee auf Basis von Boost IOStreams gestoßen:
Das funktioniert für mich super, da ich innerhalb der write-Methode sowohl in die Datei als auch auf meine GUI schreiben kann.
LG Glocke
Nur habe ich dann die Möglichkeit entweder in eine Datei- oder auf die GUI zu schreiben. Ich bin vorhin über folgende Lösungsidee auf Basis von Boost IOStreams gestoßen:
Code: Alles auswählen
#include <boost/iostreams/concepts.hpp>
#include <boost/iostreams/stream_buffer.hpp>
#include <iostream>
namespace bio = boost::iostreams;
class MySink : public bio::sink
{
public:
std::streamsize write(const char* s, std::streamsize n)
{
//Do whatever you want with s
//...
return n;
}
};
int main()
{
bio::stream_buffer<MySink> sb;
sb.open(MySink());
std::streambuf * oldbuf = std::clog.rdbuf(&sb);
std::clog << "hello, world" << std::endl;
std::clog.rdbuf(oldbuf);
return 0;
}
LG Glocke
Rage - ein "modernes" Rogue-like (C++11, SFML)