Boost logo

Boost :

From: Larry Evans (cppljevans_at_[hidden])
Date: 2006-05-06 13:37:23


On 05/01/2006 08:49 AM, Ronald Garcia wrote:
> The review of Joel de Guzman's Fusion library begins today, May 1,

In extension.htm, there's a section:

   Designing a suitable iterator

which has code:

template<typename Struct, int Pos>
struct example_struct_iterator
     : iterator_base<example_struct_iterator<Struct, Pos> >
{
     BOOST_STATIC_ASSERT(Pos >=0 && Pos < 3);
     typedef Struct struct_type;
     typedef mpl::int_<Pos> index;
     typedef example_struct_iterator_tag ftag;
     typedef random_access_traversal_tag category;

     example_struct_iterator(Struct& str)
         : struct_(str) {}

     Struct& struct_;
};

However, there's no declaration of example_struct_iterator_tag. I
assume it can just be declared (no need to define it) like
the example_sequence_tag occuring just below the section titled:

    Enabling Tag Dispatching

Actually, I think that's another typo, IOW instead of
example_sequence_tag, it should be example_tag. But that
makes me wonder if you didn't meand that
example_struct_iterator_tag should also be example_tag.

Also, since the above code is all for a specific structure, i.e.
example_struct, why is there any need for including a Struct
template parameter. Why not just:

   template<int Pos>
   struct example_struct_iterator
       : iterator_base<example_struct_iterator<example_struct, Pos> >
   {
       BOOST_STATIC_ASSERT(Pos >=0 && Pos < 3);
       typedef example_struct struct_type;
   ...
   };

?


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk