mirror of
				https://github.com/boostorg/iterator.git
				synced 2025-11-03 18:01:37 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			100 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
 | 
						|
[section:function_output Function Output Iterator]
 | 
						|
 | 
						|
The function output iterator adaptor makes it easier to create custom
 | 
						|
output iterators. The adaptor takes a unary function and creates a
 | 
						|
model of Output Iterator. Each item assigned to the output iterator is
 | 
						|
passed as an argument to the unary function.  The motivation for this
 | 
						|
iterator is that creating a conforming output iterator is non-trivial,
 | 
						|
particularly because the proper implementation usually requires a
 | 
						|
proxy object.
 | 
						|
 | 
						|
[h2 Example]
 | 
						|
 | 
						|
    struct string_appender
 | 
						|
    {
 | 
						|
        string_appender(std::string& s)
 | 
						|
            : m_str(&s)
 | 
						|
        {}
 | 
						|
 | 
						|
        void operator()(const std::string& x) const
 | 
						|
        {
 | 
						|
            *m_str += x;
 | 
						|
        }
 | 
						|
 | 
						|
        std::string* m_str;
 | 
						|
    };
 | 
						|
 | 
						|
    int main(int, char*[])
 | 
						|
    {
 | 
						|
      std::vector<std::string> x;
 | 
						|
      x.push_back("hello");
 | 
						|
      x.push_back(" ");
 | 
						|
      x.push_back("world");
 | 
						|
      x.push_back("!");
 | 
						|
 | 
						|
      std::string s = "";
 | 
						|
      std::copy(x.begin(), x.end(), 
 | 
						|
		boost::make_function_output_iterator(string_appender(s)));
 | 
						|
 | 
						|
      std::cout << s << std::endl;
 | 
						|
 | 
						|
      return 0;
 | 
						|
    }
 | 
						|
 | 
						|
[h2 Reference]
 | 
						|
 | 
						|
[h3 Synopsis]
 | 
						|
 | 
						|
  template <class UnaryFunction>
 | 
						|
  class function_output_iterator {
 | 
						|
  public:
 | 
						|
    typedef std::output_iterator_tag iterator_category;
 | 
						|
    typedef void                     value_type;
 | 
						|
    typedef void                     difference_type;
 | 
						|
    typedef void                     pointer;
 | 
						|
    typedef void                     reference;
 | 
						|
 | 
						|
    explicit function_output_iterator();
 | 
						|
 | 
						|
    explicit function_output_iterator(const UnaryFunction& f);
 | 
						|
 | 
						|
    /* see below */ operator*();
 | 
						|
    function_output_iterator& operator++();
 | 
						|
    function_output_iterator& operator++(int);
 | 
						|
  private:
 | 
						|
    UnaryFunction m_f;     // exposition only
 | 
						|
  };
 | 
						|
 | 
						|
[h3 Requirements]
 | 
						|
 | 
						|
`UnaryFunction` must be Assignable and Copy Constructible.  
 | 
						|
 | 
						|
[h3 Concepts]
 | 
						|
 | 
						|
`function_output_iterator` is a model of the Writable and
 | 
						|
Incrementable Iterator concepts.
 | 
						|
 | 
						|
[h3 Operations]
 | 
						|
 | 
						|
  explicit function_output_iterator(const UnaryFunction& f = UnaryFunction());
 | 
						|
 | 
						|
[*Effects: ] Constructs an instance of `function_output_iterator` 
 | 
						|
  with `m_f` constructed from `f`.
 | 
						|
 | 
						|
  unspecified_type operator*();
 | 
						|
 | 
						|
[*Returns: ] An object `r` of unspecified type such that `r = t`
 | 
						|
  is equivalent to `m_f(t)` for all `t`.
 | 
						|
  
 | 
						|
 | 
						|
  function_output_iterator& operator++();
 | 
						|
 | 
						|
[*Returns: ] `*this`.
 | 
						|
 | 
						|
 | 
						|
  function_output_iterator& operator++(int);
 | 
						|
 | 
						|
[*Returns: ] `*this`.
 | 
						|
 | 
						|
[endsect] |