这个问题跟在这个问题后面:函数重载和模板推导优先级
考虑以下类:
template<typename T1, typename T2>
class Base {};
class Derived0 : public Base<double, double> {};
template<typename T1, typename T2, typename T3>
class Derived1 : public Base<T1, T2> {};
template<typename T1, typename T2, typename T3, typename T4>
class Derived2 : public Base<T3, T4> {};
以及以下功能:
template<typename T> f(const T& x); // version A
template<typename T1, typename T2> f(const Base<T1, T2>& x); // version B
我的问题是f(double)
会调用version A
(ok),f(Base<double, double>)
会调用version B
(ok),但f(Derived1<double, double, double>)
会调用version A
(请参阅开头的另一个问题的链接)。
使用C ++ 11,如何阻止version A
和强制version B
所有派生成员和是Base<T1, T2>
什么?T1
T2
注意:如果可能的话,我想避免添加辅助类,而是更喜欢将成员添加到提供的类中。