While implementing a FIFO I have used the following structure:
struct Node
{
T info_;
Node* link_;
Node(T info, Node* link=0): info_(info), link_(link)
{}
};
I think this a well known trick for lots of STL containers (for example for List). Is this a good practice? What it means for compiler when you say that Node has a member with a type of it’s pointer? Is this a kind of infinite loop?
And finally, if this is a bad practice, how I could implement a better FIFO.
EDIT: People, this is all about implemenation. I am enough familiar with STL library, and know a plenty of containers from several libraries. Just I want to discuss with people who can gave a good implementation or a good advice.
Pointers to objects of type that is being declared is fine in both C and C++. This is based on the fact that pointers are objects of fixed size (say, always 32-bit integers on 32-bit platform) so you don’t need the full size of the pointed-to type to be known.
In fact, you don’t even need a full type declaration to declare a pointer. A forward declaration would suffice:
Of course, you need a full declaration in scope at the point where you actually access members:
For FIFO look into
std::queue. Bothstd::list,std::deque, andstd::vectorcould be used for that purpose, but also provide other facilities.