Yet another form of polymorphism is the use of generics or templates. Here a type can be used as a parameter is a class description.
template <class T> class link {
public:
T value;
link<T> * nextLink;
};
The declaration provides the actual type:
link<int> intLink; // link with integer value