메소드 이름으로 숨겨진 기본 클래스를 모호하게하는 몇 가지 방법이 있습니다.
typedef Move::Move Move_Base; // 1. the LHS of :: operator ignores functions
using typename Move::Move; // 2. non-template "typename" avoids constructor
typedef class Move Move_Base; // 3. elaborated type specifier
typedef ::Move Move_Base; // 4. namespace qualification (as mentioned)
(1)은 버그로 인해 GCC에서 작동하지 않을 수 있습니다. (잘 모르겠지만 시도해 볼 수 있습니다.)
(2) 아마도 가장 우아하지만 컴파일러는 C++ 11 뉘앙스를 올바르게 가져야합니다. typename
키워드는 C++ 03에서는 불법입니다.하지만 꼭 필요한 것은 아닙니다. C++ 11에서는 typename
을 제외하고는 구문이 형식 이름 대신 생성자를 참조합니다.
상속 된 함수를 wxWindowBase::Move()
으로 한정해야합니다.
(3)은 기본 클래스가 현재 네임 스페이스의 일부일 때만 작동합니다.
(4)는 다른 네임 스페이스로 이동하는 경우 해당 둘러싼 네임 스페이스에 대해 하드 코딩 된 클래스가 수정해야하므로 약간의 고통입니다. 당신이 말했듯이, 약간 추한.
'사용'선언 (또는 'typedef'와 동일)을 시도한 적이 있습니까? – Potatoswatter