atomic_iostream.h 493 B

123456789101112131415161718192021
  1. #include <sstream>
  2. #include <iostream>
  3. // copied from StackOverflow: https://stackoverflow.com/a/34403537
  4. class AtomicWriter {
  5. std::ostringstream st;
  6. std::ostream &stream;
  7. public:
  8. AtomicWriter(std::ostream &s=std::cout):stream(s) { }
  9. template <typename T>
  10. AtomicWriter& operator<<(T const& t) {
  11. st << t;
  12. return *this;
  13. }
  14. AtomicWriter& operator<<( std::ostream&(*f)(std::ostream&) ) {
  15. st << f;
  16. return *this;
  17. }
  18. ~AtomicWriter() { stream << st.str(); }
  19. };