Hallo zusammen,
heute wurde uns bei der MSDN-Entwickler-Hotline
unter anderem folgende Frage gestellt:
Wieso kann ich std::chrono::duration [1] nicht mit std::cout verwenden?
Unsere Antwort bzw. unser Lösungsvorschlag darauf war:
Will man eine Variable mit std::cout ausgeben, muss der Streaming-Operator von std::ostream [2] für den entsprechenden Typen überladen sein. Für viele Standardtypen wie int, float, const char* und std::string sind solche Überladungen vorhanden. Viele Klassen
besitzen eine soche Überladung aber nicht. Folgender Code
std::cout << "Runtime: " << std::chrono::seconds(4) << std::endl;
kompiliert einfach deshalb nicht, weil eben kein entsprechender Operator für std::chrono::seconds existiert. Man kann diesen aber einfach nachliefern. Dazu muss man einfach nur den Operator definieren:
static std::ostream& operator <<(std::ostream& stream, const std::chrono::seconds& sec)
{
stream << sec.count() << "sec";
return stream;
}
Oberer Code lässt sich nun kompilieren und ergibt folgende Ausgabe:
Runtime: 4sec
Für eine vollständigere Lösung könnte [3] interessant sein.
[1] http://en.cppreference.com/w/cpp/chrono/duration
[2] http://www.cplusplus.com/reference/ostream/ostream/operator%3C%3C/
[3] http://home.roadrunner.com/~hinnant/bloomington/chrono_io
Wir hoffen, vielen Besuchern der MSDN Foren durch das Posten dieses Problems und einer möglichen Lösung weiterhelfen zu können.
Viele Grüße,
Entwickler-Hotline für MSDN Online Deutschland
Disclaimer:
Bitte haben Sie Verständnis dafür, dass wir hier auf Rückfragen gar nicht oder nur sehr zeitverzögert antworten können.
Bitte nutzen Sie für Rückfragen oder neue Fragen den telefonischen Weg über die MSDN-Entwickler-Hotline:
http://www.msdn-online.de/Hotline
Es gelten für die MSDN-Entwickler-Hotline und dieses Posting diese Nutzungsbedingungen
, Hinweise zu Markenzeichen, Informationen zur Datensicherheitsowie die gesonderten Nutzungsbedingungen für die MSDN-Entwickler-Hotline.