function object 연구의 9visit_each
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.