この質問はこれに続きます:関数のオーバーロードとテンプレート推論の優先順位
次のクラスを検討します。
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
私の問題は、(ok)を呼び出しf(double)
、(ok)を呼び出しますが、呼び出すことです(最初にある他の質問へのリンクを参照してください)。version A
f(Base<double, double>)
version B
f(Derived1<double, double, double>)
version A
C ++ 11を使用して、派生したすべてのメンバーをブロックしversion A
て強制する方法は?version B
Base<T1, T2>
T1
T2
注:可能であれば、ヘルパークラスを追加することは避け、提供されたクラスにメンバーを追加することをお勧めします。