先看一下boost::visit_each模板,定义在visit_each.hpp文件中
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); } }
visitor(t)
第三个参数long将来会被废除,目前只能传0.
下面有个简单的例子:
struct A { A():y(3), z(5) { } int y; int z; }; template<class T> struct Visitor { void operator()(T const& t) { cout << t.y << endl; cout << t.z << endl; } };
int main(int argc, char** argv) { A b; Visitor<A> v; visit_each(v, b, 0); return 0; }运行结果:
3 5
经典Visitor设计模式可以参考这里的一篇博客:http://blog.csdn.net/superbeck/article/details/5325991