QueueItem within the private section of the class template Queue. With QueueItem being a nested private type, it becomes inaccessible to the general program.Queue generates its own QueueItem class with the appropriate template argument for Type . The mapping between an instantiation for the QueueItem class template and an instantiation of the enclosing Queue class template is one to one.QueueItem<int> is still only instantiated when the members front and back are dereferenced in the member functions of class Queue<int>.
#include <iostream>
template <class T>
class Queue {
public:
Queue(T e):_e(e), item(e){}
class QueueItem {
friend class Queue;
public:
QueueItem(T n):_n(n){}
T show(){ return _n; }
private:
T _n;
};
QueueItem item;
T show(){ return item.show(); }
private:
T _e;
};
int main(){
Queue<int> ei(2);
std::cout << ei.show() << "\n";
return 0;
}
#include <iostream>
template <class T>
class Queue {
public:
Queue(T e):_e(e), item(e){}
class QueueItem {
friend class Queue;
public:
QueueItem(T n):_n(n){}
T show(){ return _n; }
private:
T _n;
};
QueueItem item;
T show(){ return item.show(); }
private:
T _e;
};
int main(){
Queue<int>::QueueItem qitem(3);
std::cout << qitem.show() << "\n";
return 0;
}