1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
//
// visit_each_test.cpp
//
// Copyright 2014 Peter Dimov
//
// Distributed under the Boost Software License, Version 1.0.
// See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt
//
#include <boost/visit_each.hpp>
#include <boost/core/lightweight_test.hpp>
#include <string>
struct X
{
int v;
std::string w;
};
template<class Visitor> inline void visit_each( Visitor & visitor, X const & x )
{
using boost::visit_each;
visit_each( visitor, x.v );
visit_each( visitor, x.w );
}
struct V
{
int s_;
V(): s_( 0 )
{
}
template< class T > void operator()( T const & /*t*/ )
{
}
void operator()( int const & v )
{
s_ = s_ * 10 + v;
}
void operator()( std::string const & w )
{
s_ = s_ * 10 + static_cast<int>( w.size() );
}
};
int main()
{
X x = { 5, "test" };
V v;
{
using boost::visit_each;
visit_each( v, x );
}
BOOST_TEST( v.s_ == 54 );
return boost::report_errors();
}
|