次の関数宣言を検討してください。
template<typename T> f(const T& x); // Version 1
template<typename T1, typename T2> f(const MyClass<T1, T2>& x); // Version 2
f
と関係のないタイプで呼び出すとMyClass
、最初のバージョンが呼び出されます。タイプ(テンプレートパラメータタイプが何であれ)で呼び出すf
と、2番目のバージョンが呼び出されます。MyClass
しかし今、考えてみましょう:
template<typename T1, typename T2, typename T3>
MyDerivedClass : public MyClass<T1, T2> {};
MyDerivedClass
タイプに対して呼び出される関数のバージョンは何ですか?