什么是`using`,以及C ++中构造函数之后的冒号是什么

时间:2015-11-04 15:32:05

标签: c++ class oop

你能帮我理解下面的代码吗?我有一个接口,需要编写代码。但这是我第一次使用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中找到答案:(

感谢您的帮助!

2 个答案:

答案 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

带分号的部分将初始化您的班级成员。

请参阅:In this specific case, is there a difference between using a member initializer list and assigning values in a constructor?

答案 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) {}

单冒号后的部分使用传递给构造函数的参数初始化成员。