На этом шаге мы приведем общие сведения об указанных классах.
Объекты класса gslice_array создаются при передаче среза gslice в индексе неконстантного массива значений:
namespace std { tempiate<class T> class valarray { public: . . . . . gslice_array<T> operator[] (const gslice&); . . . . . }; }
Ниже приведено точное определение открытого интерфейса класса gslice:
namespace std { class gslice { public: gslice (); // Пустое подмножество gslice (size_t start, const valarray<size_t>& size, const valarray<snze_t>& stride); size_t start() const; valarray<size_t> size() const; valarray<size_t> stride() const; }; }
Конструктор по умолчанию создаст пустое подмножество. Функции start(), size() и stride() предназначены для получения свойств обобщенного среза. Класс gslice_array поддерживает следующие операции:
namespace std { template <class T> class gslice_array { public: typedef T value_type; void operator= (const T&); void operator= (const valarray<T>&) const; void operator*= (const valarray<T>&) const; void operator/= (const valarray<T>&) const; void operator%= (const valarray<T>&) const; void operator+= (const valarray<T>&) const; void operator-= (const valarray<T>&) const; void operator^= (const valarray<T>&) const; void operator&= (const valarray<T>&) const; void operator|= (const valarray<T>&) const; void operator<<= (const valarray<T>&) const; void operator>>= (const valarray<T>&) const; ~gslice_array(); private: gslice_array(); gslice_array(const gslice_array<T>&); gslice_array& operator= (const gslice_array<T>&); ... }; }
По аналогии с классом slice_array класс gslice_array проектировался исключительно как внутренний вспомогательный класс для работы с обобщенными срезами, который должен оставаться невидимым для внешних пользователей. По этой причине все конструкторы и операторы присваивания класса gslice_array<> объявлены закрытыми.
На следующем шаге мы рассмотрим класс mask_array.