理解这个模板函数

Understanding this template function

本文关键字:函数      更新时间:2023-10-16

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

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是什么意思呢?

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

为什么返回一个比较形式,它的输出是什么?

不是递归函数....

允许我复制并添加注释:

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.
  }
};            

希望能有所帮助

这个类不是递归的。PriorityItem(Key const& key, Value const& value)构造函数只是用作为参数传入的相同值初始化成员变量。这就是key(key)value(value)所代表的。

是对同名成员变量的构造函数操作符。

Key和value是实例化对象的成员变量。π。键和。值变量是用来比较实例化对象的对象。该函数首先比较键,如果键相同,则根据它们的值比较对象。