2012-04-03 2 views
7

이 코드를 이 코드의 동작을 이해해야합니다. (즉,로 선언 된 것을 handler의로, 여기 Handler* 인)가상 기능

+3

코드에 많은 문제가 있습니다. 우선, 함수 인수는 * references *이어야합니다. –

+0

왜 참조해야합니까? – user152508

+2

(a) 슬라이싱 및 (b) 불필요한 복사로 인해. – ipc

답변

9

기능 오버로드가 아니라 자신의 정적 유형에 (당신의 인수에 대해 여기 CustomHandler*입니다) 인수의 실행 유형에 따라 작동하지 않습니다 .

가상 함수를 사용하면 개체 (함수를 호출 한 개체)의 런타임 유형을 기반으로 함수 호출을 수행 할 수 있습니다. 여러 객체의 런타임 유형을 기반으로 호출을 전달하는 것을 다중 발송이라고합니다. 이 instace에서 우리는 가장 일반적인 경우 인 double dispatch에 대해 이야기하고 있습니다. 이런 종류의 기능을 원하면 double dispatch를 구현하거나 그것을 대신하는 라이브러리를 사용해야합니다.

Visitor pattern은 구현을 수행하는 꽤 일반적인 방법입니다. Difference betwen Visitor pattern & Double Dispatch도 참조하십시오.

마지막으로, 예제 코드 (아래로 스크롤) here을 포함하는 Visitor에 대한 좋은 토론을 찾을 수 있습니다.

+0

+1 내가 대답하려고 한 것을 썼습니다. 단, 구체적인 방문자 패턴 예제를 포함 할 계획이었습니다. –

+0

@ Cheersandhth를 추가하십시오.-Alf : 잘 수행해야하는 링크를 추가했습니다. 나는 예제를 인라인으로 추가하고 싶지 않았다 (너무 많은 상용구). – Jon