头文件
boost/visit_each.hpp
作用
按照 指定的谓词 处理,如果参数为一个集合,则处理集合的每一个元素,如果参数为一个元素,则,只处理一次。
举例
#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 + 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();
}
源代码
namespace boost {
template<typename Visitor, typename T>
inline void visit_each(Visitor& visitor, const T& t, long)
{
visitor(t);
}
template<typename Visitor, typename T>
inline void visit_each(Visitor& visitor, const T& t)
{
visit_each(visitor, t, 0);
}
}