次のようなテンプレート化されたコンテナ クラスがあります。
template<
class KeyType,
class ValueType,
class KeyCompareFunctor = AnObnoxiouslyLongSequenceOfCharacters<KeyType>,
class ValueCompareFunctor = AnObnoxiouslyLongSequenceOfCharacters<ValueType>
>
class MyClass
{
[...]
}
つまり、このクラスのオブジェクトをインスタンス化する場合、いくつかの異なる方法で実行できます。
MyClass<MyKeyType, MyValueType> myObject;
MyClass<MyKeyType, MyValueType, MyCustomKeyCompareFunctor> myObject;
MyClass<MyKeyType, MyValueType, MyCustomKeyCompareFunctor, MyCustomValueCompareFunctor> myObject;
それらはすべて良いです。問題は、デフォルト以外のバージョンの ValueCompareFunctor 引数を使用する MyClass をインスタンス化したいが、それでも KeyCompareFunctor 引数のデフォルト値を使用したい場合に発生します。それから私はこれを書かなければなりません:
MyClass<MyKeyType, MyValueType, AnObnoxiouslyLongSequenceOfCharacters<MyKeyType>, MyCustomValueCompareFunctor> myObject;
何とかして 3 番目の引数を省略して、次のように書くことができれば、はるかに便利です。
MyClass<KeyType, ValueType, MyCustomValueCompareFunctor> myObject;
MyCustomValueCompareFunctor は、MyValueType 型のオブジェクトに対してのみ機能し、MyKeyType 型のオブジェクトに対しては機能しないため、コンパイラは少なくとも理論的には、ここで説明したことを理解できるようです。
C++でこれを行う方法はありますか?