function object 연구의 9visit_each

1362 단어
먼저 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);
  }
}

이것은 간단한 메커니즘을 제공했다.constT&t 매개 변수는 관찰된 대상이고Visitor&visitor 매개 변수는 t를 관찰하는 functionobject이기 때문에operator()() 함수를 실현하고visist_각 내부 호출:
visitor(t)
세 번째 파라미터 롱은 장래에 폐지될 것이며, 현재는 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

바로 질문이 있는데 왜 이visit_each?이것은 Visitor 설계 모드의 C++ 템플릿을 구현하는 것입니다.Visitor 인터페이스와 구체적인 하위 클래스를 설계하지 마세요. 사용자는 자신의 클래스를 설계하고 이 클래스의visitorfunctionobject에 접근하면 됩니다.
고전적인 Visitor 디자인 모델은 이곳의 블로그를 참고할 수 있다.http://blog.csdn.net/superbeck/article/details/5325991

좋은 웹페이지 즐겨찾기