mirror of
				https://github.com/boostorg/iterator.git
				synced 2025-10-31 16:31:39 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			101 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			101 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]
 |