001
24.08.2006, 09:47 Uhr
0xdeadbeef
Gott (Operator)
|
Zitat von FunnyDingo: |
C++: |
log("Dies ist " + "ein Test");
|
|
Ich bezweifle ernsthaft, dass das so kompiliert...
Wie dem auch sei, es gibt an der Stelle mehrere mögliche Rangehensweisen. Meine erste Idee wäre eine Klasse, die einen Stream kapselt und einen operator<< bereitstellt, der den timestamp schreibt und den Stream für weitere Ausgabe zurückgibt. In etwa so:
C++: |
#include <ctime> #include <iomanip> #include <iostream> #include <sstream> #include <string>
std::string timestamp(std::tm const &ts) { std::ostringstream osstr;
osstr << '[' << std::setfill('0') << std::setw(2) << ts.tm_hour << ':' << std::setfill('0') << std::setw(2) << ts.tm_min << ':' << std::setfill('0') << std::setw(2) << ts.tm_sec << ']'; return osstr.str(); }
class log { public: log(std::ostream &os) : os_(os) { }
template<typename T> std::ostream &operator<<(T const &t) { std::time_t now; std::tm tm_now;
time(&now); localtime_r(&now, &tm_now); return os_ << timestamp(tm_now) << ' ' << t; }
private: std::ostream &os_; };
int main() { log mylog(std::cerr);
mylog << "foo " << 2 << 3 << 4 << std::endl; mylog << "foo " << 2 << 3 << 4 << std::endl; }
|
-- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |