2012-04-15 3 views
15

다른 반환 유형 (문자열, 부호있는 int, 부호없는 int 등)을 가진 메소드가있는 객체 구조에 대해 방문자 패턴을 구현하려고합니다.다른 반환 유형의 함수를 허용하면서 방문자 패턴 구현

void Accept(Visitor *); 

을 내가 무효 리턴 유형 (동일한 인터페이스를 사용하는 방법을 알아낼 수 없습니까 :

이제 오브젝트 계층 구조에서 나는 (C++를 사용하여) 다음 서명 방법을 수락 추가 한) 동시에 여러 가지 리턴 유형을 갖는 구체적인 메소드를 제공합니다.

+0

당신이하고 싶은 것에 대한 더 나은 설명을 제공해야합니다. * 다른 반환 유형 *이란 무엇을 의미합니까? 방문자 패턴에서 적절한 구현을 가진 함수는'accept'가 아니라 방문자 내부의 구현물입니다. –

답변

14

형식 계층 구조의 Accept 메서드는 디스패처이며 반환 유형이 없습니다. 당신이 원하는 것은 값을 생성하는 방문 경우 가장 간단한 방법은 방문자의 상태의 일부로서 그를 추가하는 것입니다 :

struct times2 : visitor { 
    double value; 
    times2() : value() {} 
    void operator()(int x) { value = x * 2; } 
    void operator()(double x) { value = x * 2; } 
}; 

object o; 
times2 v; 
o.accept(v); 
std::cout << "Result is " << v.value << std::endl; 

다시, 방문자의 특정 세부 사항에 따라 달라질 것이다 구현,하지만 아이디어는 반환보다는 방문자에 결과를 저장할 수 있다는 것입니다.