2017-09-10 1 views
1

2 가지 유형의 기본 및 유도 및 부스트 : 변형이 있습니다. 나는 타입 2는이 자료와 빈에 정의 된 가정에 대한 연산자를 대체하지 않습니다부스트 변형 및 방문자

struct Derived : public Base 
{ 
    void operator(Type1& t) { /*some impl*/ } 
}; 

:로

struct Base : public boost::static_visitor<> 
{ 
    virtual void operator(Type1& t) {} 
    virtual void operator(Type2& t) {} 
}; 

는 내가하고 싶은 파생 정의합니까이다. 내가

Derived visitor; 
boost::apply_visitor(visitor, variant); 

를 작성하는 경우 어떤 이유

나는 오류 : 없음 일치 '(파생) (타입 2 &)'물론

에 호출 난에 타입 2에 대한 연산자를 추가하는 경우 파생 된 그것은 괜찮습니다.
아무도 Type2에 대한 연산자를 추가하지 않고 작동하지 않는 이유를 이해할 수 있도록 도와주세요.

+1

'가상 void 연산자 (타입 1 & t) {}'올바른 구문이 아닙니다. 실제로 무엇을 썼습니까? – cpplearner

답변

3

이름 조회는 기본 클래스의 연산자를 고려하지 않습니다. 당신은 이름 검색으로 볼 수 명시 적으로 Derived의 범위에 그것을 가지고해야합니다

struct Derived : public Base 
{ 
    void operator()(Type1& t) { /*some impl*/ } 
    using Base::operator(); 
}; 
+1

몰랐습니다! 감사! –