Cope with special type features. If there is a good reason, why a compiler-generated template for a special type does not meet your requirements or would be more efficient or convient to use when implemented in another way, you can give the compiler a special implementation for this type - this special implementation is called template specialization. For example, when you know, that a shape-vector will always hold exactly one object, you can specialize the vector-template as follows:
class vector<shape> {
shape v;
public:
vector (shape& s) : v(s) { }
shape& operator[] (int i) { return v; }
int get_size() { return 1; }
};
Let's use it:
shape MyShape; vector<shape> single_shape_vector (MyShape);
Template specializations can also be provided for template functions ([1], §r.14.5) and template operators.