mirror of
https://github.com/boostorg/iterator.git
synced 2025-11-01 17:01:39 +01:00
Moved generator_iterator.hpp in iterator directory and modernized.
generator_iterator now uses decltype approach to deduce value and reference types instead of the legacy result_type typedef, which was required to be defined by the generator function. The default constructor of generator_iterator now value initializes its data members to avoid using uninitialized data.
This commit is contained in:
@@ -15,7 +15,7 @@
|
||||
<h1>Generator Iterator Adaptor</h1>
|
||||
|
||||
<p>Defined in header <a href=
|
||||
"../../boost/generator_iterator.hpp">boost/generator_iterator.hpp</a></p>
|
||||
"../../boost/iterator/generator_iterator.hpp">boost/iterator/generator_iterator.hpp</a></p>
|
||||
|
||||
<p>The generator iterator adaptor makes it easier to create custom input
|
||||
iterators from 0-ary functions and function objects. The adaptor takes a
|
||||
@@ -33,9 +33,7 @@
|
||||
<blockquote>
|
||||
<pre>
|
||||
namespace boost {
|
||||
template <class Generator>
|
||||
class generator_iterator_policies;
|
||||
|
||||
namespace iterators {
|
||||
template <class Generator>
|
||||
class generator_iterator_generator;
|
||||
|
||||
@@ -43,6 +41,7 @@ namespace boost {
|
||||
typename generator_iterator_generator<Generator>::type
|
||||
make_generator_iterator(Generator & gen);
|
||||
}
|
||||
}
|
||||
</pre>
|
||||
</blockquote>
|
||||
<hr>
|
||||
@@ -60,8 +59,8 @@ template <class Generator>
|
||||
class generator_iterator_generator
|
||||
{
|
||||
public:
|
||||
typedef <i>unspecified</i> type; // the resulting generator iterator type
|
||||
}
|
||||
using type = <i>unspecified</i>; // the resulting generator iterator type
|
||||
};
|
||||
</pre>
|
||||
|
||||
<h3>Template Parameters</h3>
|
||||
@@ -78,8 +77,8 @@ public:
|
||||
"http://www.sgi.com/tech/stl/Generator.html">Generator</a></tt></td>
|
||||
|
||||
<td>The generator (0-ary function object) type being wrapped. The
|
||||
return type of the function must be defined as
|
||||
<tt>Generator::result_type</tt>. The function object must be a model of
|
||||
return type of the function is deduced automatically from its
|
||||
<tt>operator()</tt>. The function object must be a model of
|
||||
<a href=
|
||||
"http://www.sgi.com/tech/stl/Generator.html">Generator</a>.</td>
|
||||
</tr>
|
||||
@@ -122,14 +121,14 @@ make_generator_iterator(Generator & gen);
|
||||
<blockquote>
|
||||
<pre>
|
||||
#include <iostream>
|
||||
#include <boost/generator_iterator.hpp>
|
||||
#include <boost/iterators/generator_iterator.hpp>
|
||||
|
||||
class my_generator
|
||||
{
|
||||
public:
|
||||
typedef int result_type;
|
||||
using result_type = int;
|
||||
my_generator() : state(0) { }
|
||||
int operator()() { return ++state; }
|
||||
result_type operator()() { return ++state; }
|
||||
private:
|
||||
int state;
|
||||
};
|
||||
@@ -137,7 +136,7 @@ private:
|
||||
int main()
|
||||
{
|
||||
my_generator gen;
|
||||
boost::generator_iterator_generator<my_generator>::type it = boost::make_generator_iterator(gen);
|
||||
auto it = boost::iterators::make_generator_iterator(gen);
|
||||
for(int i = 0; i < 10; ++i, ++it)
|
||||
std::cout << *it << std::endl;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user