Шаблон SemiRef

Шаблон классов 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.

Наверх