2014-02-26 2 views
2

CRTP를 사용하고 있으며 기본 클래스에 템플릿 함수가 있습니다. use 템플릿이 파생 된 클래스의 멤버 함수는 어떻게합니까?템플릿 멤버 함수와 함께 'using'지시문이 작동하는 방식

template <typename T> 
struct A { 
    int f(); 
    template <typename S> 
    int g(); 
}; 
struct B: public A<B> { 
    int h() { return f() + g<void>(); } // ok 
}; 
template <typename T> 
struct C: public A<C<T>> { 
    // must 'use' to get without qualifying with this-> 
    using A<C<T>>::f; // ok 
    using A<C<T>>::g; // nope 
    int h() { return f() + g<void>(); } // doesn't work 
}; 

는 * 편집 * 이전 질문, 의견을 포함 Using declaration for type-dependent template name는, 이것이 가능하지 않은 표준의 감독이 될 수 있습니다 제안합니다.

답변

1

using 문 (이 코드는 using A<C<T>>::template g;과 비슷하지만이 코드는 제 컴파일러로 컴파일되지 않습니다)와 함께 문제를 해결하는 방법을 모르겠습니다. 하지만 당신은 다음 중 한 가지 방법으로 g<void> 메서드를 호출 할 수 있습니다

  • this->template g<void>()

  • A<C<T>>::template g<void>()

template 키워드를 사용의 어두운면에 대한 자세한 내용은 this question에 대한 답변을 참조하십시오.

+0

예, 다른 두 문장은'using '을 사용하지 않고 g에 액세스하는 방법이지만 둘 다 꽤 귀찮습니다! 나는'템플리트'의 마법 주문을 피하면서 그들을 피할 수 있기를 바랬다. –

관련 문제