我有我的模板化容器类,如下所示:
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++中执行此操作?
很抱歉标题不清楚,实际上我无法想到一个简洁地描述我的问题的标题.
但问题很简单.我有一个Node类.我希望通过其id_字段维护其对象之间的顺序.我知道如果我在Node类中重载<运算符或在multiset中提供Comparator对象,那么创建多节点<Node>将正确维护容器中的顺序.但我想声明一个multiset <Node*>容器,并希望实现相同的行为.
这是我的Node类定义:
class Node {
int id_;
...
public:
Node() {
...
}
int getId() {
return id_;
}
void setId(int id) {
id_ = id;
}
...
bool operator<(const Node &input) {
return (this->id_ < input.id_);
}
};
Run Code Online (Sandbox Code Playgroud)
我该怎么办?