|
Boost : |
From: Larry Evans (cppljevans_at_[hidden])
Date: 2005-04-28 09:55:52
On 11/08/2001 10:18 AM, Aleksey Gurtovoy wrote:
[snip]
> And the extensions themselves are here:
> http://groups.yahoo.com/group/boost/files/tuple_ext/
The test code in:
libs/tuple_ext/test/tuple_iterator_test.cpp
looks like the iterator, to be useful, requires some
templated function similar to the:
template<class Tuple> void foo(tuples::tuple_iterator<Tuple>) {}
in that file. However, the template argument, Tuple, provides no
clue to the programmer as to the argument type or which element
in the tuple is being passed. Wouldn't a variant argument be
more self-documenting? In addition, wouldn't some sort of
visitor also be more self-documenting. The visitor would take
the same argument as the tuple:
visitor<tuple::type_list>
BTW, the zip file did not have tuple.hpp; hence, I'm guessing what
the appropriate nested type (type_list) for the tuple types
would be. Then visitor could be defined as follows:
template
< typename HeadField
, typename OtherFields
>
struct
visited_fields
< HeadField
, OtherFields
>
: public OtherFields
{
virtual
void
visit_field( HeadField& a_field )
=0
;
};
struct
empty_visited_field
{
protected:
void
visit_field
( void
)
/**@brief
* Only to avoid compile error during parse of subclass'
* using declaration.
*/
;
};
}//exit visitors_detail namespace
#include <boost/mpl/inherit_linearly.hpp>
template
< typename type_list
>
struct
visitors
: public boost::mpl::inherit_linearly
< type_list
, visited_fields
<boost::mpl::arg<2>
, boost::mpl::arg<1>
>
, empty_visited_field
>::type
{
};
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk