std::initializer_list
是一个类模板,它包含一个初始化器序列,它有一个非常小的接口,因为它的唯一目的是用来用包含它的值序列初始化另一个对象。与std::vector
或std::deque
不同,std::initializer_list
不适用作通用容器。
函数LinkedQueue<T>::LinkedQueue(const std::initializer_list<T>&)
被称为当有人试图列出初始化一个LinkedQueue<T>
,像这样:
LinkedQueue<int> q {1, 2, 3};
语言自动构造一个std::initializer_list<int>
对象,其包含值1,2,3,按该顺序。这个对象被传递给构造函数。在构造函数返回后,用户期望新构造的LinkedQueue<int>
对象将按照该顺序包含值1,2,3。
您需要编写构造函数,使其成为true。为此,可以使用基于范围的for循环遍历std::initializer_list<T>
对象,并将值添加到列表中。像这样的东西可能会奏效,假设你有一个push_back
功能和工作的默认构造函数:
template<class T>
LinkedQueue<T>::LinkedQueue(const std::initializer_list<T>& il): LinkedQueue() {
for (const T& val : il) {
push_back(val);
}
}
这代表到默认的构造函数来设置类不变量,然后插入指定的初始化秩序。
你试过Google吗? – erip
另外,不要忘记编译_at least_ C++ 11支持。 '-std = C++ 11'或'-std = C++ 14'。 – erip
我做过了,但对我的问题有独特的答案仍然有帮助。 –