Шаг 3 - Как это применять.
Берем код параметризированного класса.
template ‹class T›
class SmartPointer {
private:
T* tObj;
public:
SmartPointer(T* _t=NULL): tObj(_t);
~SmartPointer() {if (tObj) delete tObj;}
operator T*(){return tObj;}
T* operator-›(){return tObj;}
};