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, именно в таком порядке.
Вам нужно написать конструктор так, чтобы это было правдой. Для этого можно выполнить итерацию по объекту std::initializer_list<T>
с помощью цикла for, основанного на диапазоне, и добавить в список значения по порядку. Что-то вроде этого может сработать, если предположить, что у вас есть функция push_back и рабочий конструктор по умолчанию:
template<class T>
LinkedQueue<T>::LinkedQueue(const std::initializer_list<T>& il): LinkedQueue() {
for (const T& val : il) {
push_back(val);
}
}
Это делегирует конструктору по умолчанию установку инвариантов класса, а затем вставляет заданные инициализаторы по порядку.