"Идиомы и стили С++" - читать интересную книгу автора (Makhmutov Albert)

Шаг 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;}

};