На этом шаге мы приведем общие сведения об указанных классах.
Объекты класса 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.