相关疑难解决方法(0)

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

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

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++ templates arguments default

5
推荐指数
1
解决办法
6946
查看次数

多集的自定义比较器,包含指向对象的指针

很抱歉标题不清楚,实际上我无法想到一个简洁地描述我的问题的标题.

但问题很简单.我有一个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)

我该怎么办?

c++ operator-overloading

2
推荐指数
1
解决办法
1520
查看次数