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++中执行此操作?
通常,在模板和函数或方法中,C++都允许您使用默认值(从而省略)仅跟踪参数 - 没有出路.
我推荐一个模板或宏缩短AnObnoxiouslyLongSequenceOfCharacters<MyKeyType>到Foo<MyKeyType>-不完美,但总比没有好.
| 归档时间: |
|
| 查看次数: |
6946 次 |
| 最近记录: |