Advertisement
Radfler

::ostream_iterator

Dec 30th, 2019 (edited)
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.53 KB | None | 0 0
  1. #include <ostream>
  2. #include <string>
  3.  
  4. template<typename Delim,
  5.          typename CharT = char,
  6.          typename Traits = std::char_traits<CharT>>
  7. class ostream_iterator {
  8.  
  9. public:
  10.  
  11.     using delimiter_type = Delim;
  12.     using char_type = CharT;
  13.     using traits_type = Traits;
  14.     using ostream_type = std::basic_ostream<char_type, traits_type>;
  15.  
  16.     using value_type = void;
  17.     using difference_type = std::ptrdiff_t;
  18.     using pointer = void;
  19.     using reference = void;
  20.     using iterator_category = std::output_iterator_tag;
  21.  
  22.     ostream_iterator(ostream_type& stream) :
  23.         stream_ptr(std::addressof(stream)) { }
  24.  
  25.     ostream_iterator(ostream_type& stream, const delimiter_type& delimiter) :
  26.         stream_ptr(std::addressof(stream)), delim(delimiter) { }
  27.  
  28.     ostream_iterator(ostream_type& stream, delimiter_type&& delimiter) :
  29.         stream_ptr(std::addressof(stream)), delim(std::move(delimiter)) { }
  30.  
  31.     template<typename T>
  32.     ostream_iterator& operator=(const T& value) {
  33.         *stream_ptr << value << delim;
  34.         return *this;
  35.     }
  36.  
  37.     ostream_iterator& operator*() {
  38.         return *this;
  39.     }
  40.  
  41.     ostream_iterator& operator++() {
  42.         return *this;
  43.     }
  44.  
  45.     ostream_iterator& operator++(int) {
  46.         return *this;
  47.     }
  48.  
  49. private:
  50.  
  51.     ostream_type* stream_ptr;
  52.     delimiter_type delim;
  53.  
  54. };
  55.  
  56. template<typename Delim, typename CharT, typename Traits>
  57. ostream_iterator(std::basic_ostream<CharT, Traits>& stream, Delim delim)
  58.     -> ostream_iterator<Delim, CharT, Traits>;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement