Hi
Wie der Titel schon sagt, möchte ich alles das was über cout in die Console geschrieben wird, zusätzlich in eine
Datei ausgeben. Mit std::cout.rdbuf() kann man ja den stream zozusagen umleiten. Das Problem ist, dass
wenn man dort den streambuffer von einem ofstream übergibt, das genze nicht mehr in die Console geschrieben
wird ( was ja auch irgendwie logisch ist )... nur wie kann ich jetzt den output sowohl in die Console als auch in
die Datei lenken ?
Ich habe es schon mit einem eigenen Streambuffer nach folgendem musster versucht ( hier noch ohne Datei):
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class StreamInterceptor
: public std::streambuf
{
public:
StreamInterceptor(std::ostream& _stream)
{
_stream.rdbuf(this);
}
std::streamsize xsputn ( const char * s, std::streamsize n )
{
String str(s, n);
printf(str.c_str());
return (n);
}
private:
std::streambuf* m_OldStreamBuffer;
};
// Und dann der aufruf irgendwie so:
new StreamInterceptor(std::cout);
|
Das Problem dabei ist, dass bei folgendem Aufruf
|
C-/C++-Quelltext
|
1
|
std::cout << "Hallo" << 1 << String("Cool");
|
nur das "Hallo" geschrieben wird... wie krieg ich die anderen Variablentypen auch noch ?