다음 함수 선언을 고려 : 나는 MyClass
와 전혀 관계가있는 유형 f
를 호출 할 경우기능 오버로드 및 템플릿 공제 우선 순위
template<typename T> f(const T& x); // Version 1
template<typename T1, typename T2> f(const MyClass<T1, T2>& x); // Version 2
을, 첫 번째 버전이 호출됩니다. MyClass
유형 (템플릿 매개 변수 유형이 무엇이든)으로 f
을 호출하면 두 번째 버전이 호출됩니다. 그러나 이제는 다음을 고려하십시오.
template<typename T1, typename T2, typename T3>
MyDerivedClass : public MyClass<T1, T2> {};
MyDerivedClass
유형에 대해 어떤 버전의 함수가 호출됩니까?
최초 변환은 파생 변환을 필요로하지 않으므로 더 잘 일치합니다. –