template class Queue { class Node { Node *nextNode; ItemType _item; public: Node(ItemType item, Node *next = nullptr) : nextNode(next), _item(item) { } ItemType item() const { return _item; } Node* next() { return nextNode; } } _front = nullptr, _back = nullptr; public: bool empty() const { return _front == nullptr; } void add(ItemType it) { if ( _front == nullptr ) _front = _back = new Node(it); else _back = new Node(it, _back); } ItemType take() { ItemType x = _front->item(); delete _front; _front = _front->next(); if ( _front == nullptr ) _back = nullptr; } };