我的模板化容器类如下所示:
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;
如果我能以某种方式省略第三个参数并写下这个会更方便:
MyClass<KeyType, ValueType, MyCustomValueCompareFunctor> myObject;
由于 MyCustomValueCompareFunctor 仅适用于 MyValueType 类型的对象而不适用于 MyKeyType 类型的对象,因此编译器似乎至少在理论上可以解决我在这里的意思。
有没有办法在 C++ 中做到这一点?