【发布时间】:2012-12-03 17:59:09
【问题描述】:
考虑以下函数声明:
template<typename T> f(const T& x); // Version 1
template<typename T1, typename T2> f(const MyClass<T1, T2>& x); // Version 2
如果我用与MyClass 无关的类型调用f,将调用第一个版本。如果我用MyClass 类型(无论模板参数类型是什么)调用f,那么将调用第二个版本。但现在,考虑一下:
template<typename T1, typename T2, typename T3>
MyDerivedClass : public MyClass<T1, T2> {};
MyDerivedClass 类型将调用哪个版本的函数?
【问题讨论】:
-
第一个将是更好的匹配,因为它不需要派生到基础的转换。
标签: c++ class templates c++11 overloading