std::hex rückgängig machen ohne extra stringstream
-
Folgendes Minimalbeispiel:
#include <sstream> #include <cassert> struct data { std::uint64_t hexdata; int counter; }; std::ostream &operator<<(std::ostream &os, const data &d) { std::ostringstream ss; // Sehr unelegant ss << std::hex << d.hexdata; // und langsam return os << ss.str() << ' ' << d.counter; } int main() { data d{ 0xDEAD, 11 }; { std::ostringstream ss; ss << d; assert(ss.str() == "dead 11"); } { std::ostringstream ss; ss << std::oct << d; assert(ss.str() == "dead 13"); } }Ich würde gerne den unnötigen ostringstream in Zeile 9 und 10 loswerden. Das Problem ist dass "counter" so formatiert werden soll wie angegeben, hexdata hingegen immer hexadezimal.
Hat jemand eine Idee wie ich das machen kann?
-
Warum steht das std::hex nicht direkt im Ausgabestream?
-
#include <cstdint> #include <cassert> #include <sstream> struct data { std::uint64_t hexdata; int counter; }; std::ostream & operator<<( std::ostream & os, data const & d ) { auto old_flags( os.flags() ); os << std::hex << d.hexdata << ' '; os.flags( old_flags ); return os << d.counter; } int main() { data d{ 0x0dead, 11 }; { std::ostringstream ss; ss << d; assert(ss.str() == "dead 11"); } { std::ostringstream ss; ss << std::oct << d; assert(ss.str() == "dead 13"); } }