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
我做過了,但對我的問題有獨特的答案仍然有幫助。 –