Шаблон классов SemiRef ( полу-ссылка ) ведёт себя, как ссылка, за исключением оператора присваивания. Поэтому эта ссылка может ссылаться на разные объекты: template <class T> struct SemiRef { T * p; explicit SemiRef ( T & t ) : p(&t) {} }; template <class T> inline bool operator < ( const SemiRef<T> & a, const SemiRef<T> & b ) { return *a.p < *b.p; } template <class T> inline bool operator > ( const SemiRef<T> & a, const SemiRef<T> & b ) { return *a.p > *b.p; } template <class T> inline bool operator <= ( const SemiRef<T> & a, const SemiRef<T> & b ) { return *a.p <= *b.p; } template <class T> inline bool operator >= ( const SemiRef<T> & a, const SemiRef<T> & b ) { return *a.p >= *b.p; } template <class T> inline bool operator == ( const SemiRef<T> & a, const SemiRef<T> & b ) { return *a.p == *b.p; } template <class T> inline bool operator != ( const SemiRef<T> & a, const SemiRef<T> & b ) { return *a.p != *b.p; } template <class T> inline T operator + ( const SemiRef<T> & a, const SemiRef<T> & b ) { return *a.p + *b.p; } Здесь определены ещё не все операторы. Они будут добавляться по мере надобности Исходники находятся в файле template.h. Наверх |