理解这个模板功能

时间:2014-03-26 13:39:41

标签: c++

我正在尝试理解一个类文件,以便将我自己的编写代码与它集成,但是我在理解这个模板函数时遇到了一些困难,而且我无法找出这个函数的输出。

template <typename Key, typename Value> struct PriorityItem {
  Key key;
  Value value;
  PriorityItem() {}
  PriorityItem(Key const& key, Value const& value) : key(key), value(value) {
  }
  bool operator<(PriorityItem const& pi) const {
    if (key == pi.key)
      return value < pi.value;
    return key < pi.key;
  }
};

我可以理解这个模板有两个输入并初始化它们。然后,如果我没有弄错,它会变成某种递归函数,但pi.keypi.value是什么意思?

它真的是一个递归函数吗?

为什么它会返回一个比较表格,这是什么输出?

3 个答案:

答案 0 :(得分:4)

这不是一个递归函数....

允许我复制并添加评论内容:

template <typename Key, typename Value> 
struct PriorityItem {   // This is a struct template, it takes two type parameters Key and Value
  Key key; // Key is an attribute of the struct and is of type Key (one of the template parameters)
  Value value; // Value is an attribute of the struct and is of type Value (the second template parameter)
  PriorityItem() {} // This is the default constructor. 
                    // It relies on Key and Value types to have proper constructors     
                    // in order to initialize the key and value attributes.
  PriorityItem(Key const& key, Value const& value) : key(key), value(value) {
                    // This is parameter constructor. It provides values
                    // to both attributes and assigns them in the initializer list.
  }
  bool operator<(PriorityItem const& pi) const {
     // This is an operator< method. It allows to do things like :
     //     PriorityItem<A,B> a;
     //     PriorityItem<A,B> b;
     //     ...
     //     if(a < b) { ... }
     //

     // the comparison relationship goes as follows:
     if (key == pi.key)          // If key attribute is the same in both, PriorityItems...
        return value < pi.value; // then follow the order of the value attributes.
     return key < pi.key;        // Otherwise, follow the order of the key attributes.

  }
};            

希望这有帮助

答案 1 :(得分:1)

这个类的任何内容都不是递归的。 PriorityItem(Key const& key, Value const& value)构造函数只是使用与参数传入的相同值初始化成员变量。这就是key(key)value(value)所代表的含义。这些是具有相同名称的memeber变量的构造函数。

答案 2 :(得分:1)

键和值是实例化对象的成员变量。 pi.key和pi.value变量是您用来比较实例化变量的对象。该函数的作用是首先比较键,如果键是相同的,它会根据对象的值来比较对象。