방문자 패턴을 구현하는 LLVM InstVisitor.h 파일을보고 있습니다. 그들의 구현은 Visitor Pattern에서 본 것과는 아주 다릅니다. 문서에서LLVM InstVisitor - 가상 기능 없음?
나는이 발견
이는 '하위 클래스'템플릿 매개 변수에 대한 귀하의 새로운 유형을 지정,이 클래스에서 상속, 그리고에서 "재정의"visitXXX 기능을 자신의 방문자를 정의하는 방법을 당신의 수업. 이 클래스는 가상 함수가 아니라 정적으로 오버로드되는 오버플로 관점에서 으로 정의되었으므로 "오버 라이드"라고 말합니다.
...이 클래스는 특별히 가상 함수 호출 오버 헤드를 피하기 위해 주형으로 설계되어참고. InstVisitor를 정의하고 사용하는 것은 지침 opcode를 통해 자신의 switch 문을 사용하는 것만 큼 효율적일뿐 입니다.
this answer는 LLVM이 구현 방문자 패턴을 사용 말한다 때문에 내가 해달라고 부탁하지만 내가 본 다른 구현과 너무 다른 이유를 알아낼 수 없습니다.
방문자 패턴이 파일에서 정확히 어떻게 사용됩니까?
에주의를 패턴이 지정이나 다형성이 달성 방법에 대해 신경 쓰지 않는다는 사실에 :
사용의 예는 문서가 설명 그대로입니다. 그것은 일반적으로 런타임 다형성 및 동적 디스패치로 배웁니다. 그러나 이것은 컴파일 타임의 다형성과 오리 - 타이핑과 똑같이 달성 될 수 있습니다. – StoryTeller
@StoryTeller 설명해 주셔서 감사합니다. 그러나 이해할 수없는 것은 비 가상 함수를 어떻게 "오버라이드"하고 패턴의 의도 된 결과를 얻는 지에 대한 것입니다. – Everyone