Mittwoch, 14. April 2010

C++ "Lazy Evaluation" für Streams

Manchmal will man nicht das ein Stream überhaupt Sachen ausgibt (z.B. für Debugstreams die sich bei Bedarf zuschalten kann) und dann will man natürlich auch nicht das die Parameter die durch den Streamoperator gehen abgearbeitet werden da sich dort eventuell komplexe Parsereien verstecken könnten.

Hierfür gibt es einen denkbar einfachen Trick mit C-Macros (jaja ich weiß, aber hin und wieder bin sogar ich da pragmatisch :P ).

#include <iostream>
#define DEBUGSTREAM if (!debug); else std::cerr

int main() {
bool debug = false;
DEBUGSTREAM << "Test\n";
return 0;
}

In diesem Code wird nichts ausgegeben und auch nichts ausgewertet, das Verhalten lässt sich einfach zur Laufzeit ändern. Tada! "Lazy Evaluation" on demand :)

Keine Kommentare: