C++:除最后一个之外的模板参数的默认值?

Jer*_*ner 5 c++ templates arguments default

我有我的模板化容器类,如下所示:

template<
   class KeyType, 
   class ValueType, 
   class KeyCompareFunctor   = AnObnoxiouslyLongSequenceOfCharacters<KeyType>, 
   class ValueCompareFunctor = AnObnoxiouslyLongSequenceOfCharacters<ValueType> 
>
   class MyClass
   {
      [...]
   }
Run Code Online (Sandbox Code Playgroud)

这意味着当我实例化这个类的对象时,我可以通过几种不同的方式来实现:

MyClass<MyKeyType, MyValueType> myObject;
MyClass<MyKeyType, MyValueType, MyCustomKeyCompareFunctor> myObject;
MyClass<MyKeyType, MyValueType, MyCustomKeyCompareFunctor, MyCustomValueCompareFunctor> myObject;
Run Code Online (Sandbox Code Playgroud)

这些都很好.当我想要实例化使用ValueCompareFunctor参数的非默认版本的MyClass时,问题出现了,但我仍然想使用KeyCompareFunctor参数的默认值.然后我要写这个:

MyClass<MyKeyType, MyValueType, AnObnoxiouslyLongSequenceOfCharacters<MyKeyType>, MyCustomValueCompareFunctor> myObject;
Run Code Online (Sandbox Code Playgroud)

如果我能以某种方式省略第三个参数并且只写下这个会更方便:

MyClass<KeyType, ValueType, MyCustomValueCompareFunctor> myObject;
Run Code Online (Sandbox Code Playgroud)

由于MyCustomValueCompareFunctor仅适用于MyValueType类型的对象而不适用于MyKeyType类型的对象,因此编译器似乎至少在理论上可以解决我的意思.

有没有办法在C++中执行此操作?

Ale*_*lli 5

通常,在模板和函数或方法中,C++都允许您使用默认值(从而省略)仅跟踪参数 - 没有出路.

我推荐一个模板或宏缩短AnObnoxiouslyLongSequenceOfCharacters<MyKeyType>Foo<MyKeyType>-不完美,但总比没有好.