你能帮我理解下面的代码吗?我有一个接口,需要编写代码。但这是我第一次使用OOP。如果您回答有关此代码的一些问题,我将不胜感激。
template <class T, class Compare = std::less<T>>
class List_of_objects {
public:
using IndexChange =
std::function<void(const T& element, size_t new_element_index)>;
explicit Heap(
Compare compare = Compare(),
IndexChange index_change = IndexChange());
// Other methods not important in my question
private:
IndexChange index_change_;
Compare compare_;
}
// Realization of methods
template<class T, class Compare>
List_of_objects<T, Compare>::List_of_objects(Compare compare, IndexChange index_change)
: compare_(compare), index_change_(index_change) {}
我已经从this site了解了std::function<>
做了什么,但我不明白为什么我们在'IndexChange'之前写using
我也不知道compare_(compare)
的含义是什么,以及List_of_objects()
我认为问题并不难,但我遇到了截止日期,我无法在Stroustrup和i-net中找到答案:(
感谢您的帮助!
答案 0 :(得分:1)
using IndexChange = std::function<void(const T& element, size_t new_element_index)>;
允许您不要再次写入定义。这是一条捷径。
然后
IndexChange index_change_;
与定义
相同std::function<void(const T& element, size_t new_element_index)> index_change_;
请参阅:What is the logic behind the "using" keyword in C++?
关于compare_
,它是由您的定义中的模板参数Compare
定义其类型的属性,默认情况下为std::less
。
因此,如果使用另一个模板参数实例化List_of_objects,则调用compare_()
将调用std::less
或另一个类的实例。例如:List_of_objects<int, MyComparator>
然后将使用类MyComparator
而不是std::less
。
请参阅:Default template arguments for function templates
带分号的部分将初始化您的班级成员。
答案 1 :(得分:0)
using IndexChange =
std::function<void(const T& element, size_t new_element_index)>;
您可以将其理解为类型的缩写。您无需撰写std::function<.....
,只需使用IndexChange
,就像在此处完成一样:
explicit Heap(
Compare compare = Compare(),
IndexChange index_change = IndexChange());
这是List_of_objects
的构造函数:
List_of_objects<T, Compare>::List_of_objects(Compare compare, IndexChange index_change)
: compare_(compare), index_change_(index_change) {}
单冒号后的部分使用传递给构造函数的参数初始化成员。