Wie kann ich dieses "Objekt" in einern String umwandeln?
-
Hallo!
Ich hab mir was aus Codeschnipseln zusammengebaut.
Und zwar wollte ich die Laufzeit eines bestimmten Codeteils messen. (Es ging um eine Bubblesort - ist aber unwichtig)Das Ganze funktioniert mit diesem Uhr-"Objekt":
Uhr uhr; { Uhr::Stopper stopper( uhr ); // Anweisungen deren Laufzeit gemessen werden soll } cout << uhr << endl;Hier die dazugehörige Klasse:
class Uhr { public: struct Stopper { explicit Stopper( Uhr& uhr ) : m_uhr( uhr ) { m_uhr.m_start = clock(); } ~Stopper() { m_uhr.m_dauer = clock() - m_uhr.m_start; } private: Uhr& m_uhr; }; friend struct Stopper; friend std::ostream& operator<<( std::ostream& out, const Uhr& uhr ) { return out << double( uhr.m_dauer ) / double( CLOCKS_PER_SEC ) << 's'; } private: clock_t m_start; clock_t m_dauer; };Nun meine Frage: Ich möchte jetzt den Wert von "uhr" in einem String speichern?
Die Ausgabe in einerm Stream funtioniert ja schon (cout << uhr << endl;).
Ich hab es sich mit folgendem ausprobiert:
string s = "" + uhr;
string s = string(uhr);Ihr seht ich habe fast keine Ahnung von C++.
Wäre echt super wenn ihr mir helfen könntet.
MfG
Fabian
-
so könnt's klappen
Uhr uhr; std::stringstream ss; ss << uhr; std::string s = ss.str();für stringstream <sstream> includen
-
Hey super. Scheint zu funktionieren!
-
Und wenn du es einfacher haben willst, pack' diesen Code in einen Uhr::operator const string&(). Dann kannst du den Wert einfach mit "string s=uhr;" übernehmen.
(aber ich würde dafür eher doubles verwenden - da kannst du dann noch zwei Messungen direkt gegeneinander vergleichen)
-
CStoll schrieb:
Und wenn du es einfacher haben willst,
.. dann nutze boost's lexical_cast (siehe http://www.boost.org/libs/conversion/lexical_cast.htm). Etwa
std::string s = boost::lexical_cast< std::string >( uhr );CStoll schrieb:
pack' diesen Code in einen Uhr::operator const string&(). Dann kannst du den Wert einfach mit "string s=uhr;" übernehmen.
genau das sollte man nicht tun; steht auch irgendwo bei Scott Meyers.
Die Frage (an den OP) ist eher: was geschieht mit dem string, wenn die 'uhr' drin ist. Kann man es nicht sofort via Ausgabe an den Zielort streamen?
Gruß
Werner