Boost中Core模組的visit_each用法
阿新 • • 發佈:2018-12-03
標頭檔案
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); } }