Наборы объектов


Шаблон классов Set1 предназначен для создания набора с одним объектом указанного типа:

template < class A > struct Set1
{
    A a;

    Set1 () {}
    Set1 ( const A & x ) : a(x) {}
    Set1 & operator= ( const A & x ) { a = x; return *this; }
    operator A () { return a; }
};

Шаблон классов Set2 предназначен для представления двойки объектов заданных типов:

template < class A, class B = A > struct Set2
{
    A a;
    B b;

    Set2 () {}
    Set2 ( const A & x, const B & y ) : a(x), b(y) {}
 
    Set2 & operator += ( const Set2 & u )
    {
        a += u.a; b += u.b; return * this;
    }

    Set2 & operator -= ( const Set2 & u )
    {
        a -= u.a; b -= u.b; return * this;
    }

    template < class T > Set2 & operator *= ( const T & u )
    {
        a *= u; b *= u; return * this;
    }

    template < class T > Set2 & operator /= ( const T & u )
    {
        a /= u; b /= u; return * this;
    }
};

Шаблон классов Set3 предназначен для представления тройки объектов заданных типов:

template < class A, class B = A, class C = B > struct Set3
{
    A a;
    B b;
    C c;

    Set3 () {}
    Set3 ( const A & x, const B & y, const C & z ) : a(x), b(y), c(z) {}
 
    Set3 & operator += ( const Set3 & u )
    {
        a += u.a; b += u.b; c += u.c; return * this;
    }

    Set3 & operator -= ( const Set3 & u )
    {
        a -= u.a; b -= u.b; c -= u.c; return * this;
    }

    template < class T > Set3 & operator *= ( const T & u )
    {
        a *= u; b *= u; c *= u; return * this;
    }

    template < class T > Set3 & operator /= ( const T & u )
    {
        a /= u; b /= u; c /= u; return * this;
    }
};
Шаблон классов Set4 предназначен для представления четвёрки объектов заданных типов:

template < class A, class B = A, class C = B, class D = C > struct Set4
{
    A a;
    B b;
    C c;
    D d;

    Set4 () {}
    Set4 ( const A & x, const B & y, const C & z, const D & w ) : a(x), b(y), c(z), d(w) {} 
};

Исходники находятся в файле Template.h.

Наверх