На этом шаге мы приведем общие сведения об этом классе.
Объекты класса mask_array создаются при передаче valarray<bool> в индексе неконстантного массива значений:
namespace std { template<class T> class valarray { public: . . . . mask_array<T> operator[](const valarray<bool>&); . . . . }; }
Класс mask_array поддерживает следующие операции:
namespace std { template <class T> class mask_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; ~mask_array(); private: mask_array(); mask_array(const mask_array<T>&); mask_array& operator= (const mask_array<T>&); ... }; }
Класс mask_array также проектировался исключительно как внутренний вспомогательный класс для работы с маскированными подмножествами, который должен оставаться невидимым для внешних пользователей. По этой причине все конструкторы и операторы присваивания класса mask_array<> объявлены закрытыми.
На следующем шаге мы рассмотрим класс indirect_array.