Блок задач

5. Парочка классов

Темы
Сложность 4

Задача «Map Proxy»

Необходимо реализовать Proxy (заместитель) для контейнера map, управляющий доступом.

Задача

Реализовать надстройку над стандартным контейнером map, которая позволяла бы управлять доступом к определённым ключам (с разграничением чтения, записи и удаления), а также подменять при необходимости возвращаемые результаты.

В этой системе присутствует три класса:

  • std::map – базовый контейнер.
  • Auditor – базовый класс «аудитора», реализующий проверку прав и замену значений.
  • ProxiedMap – надстройка над контейнером, которая все операции с ним предваряет вызовом объекта Auditor.

Реализовать несколько подклассов для Auditor (всё разрешающий, разрешающий только чтение, подменяющий значения по заданным ключи константным значением и т.д.)

Тестирование

Разработать набор тестов, проверяющий, действительно ли блокируются попытки несанкционированного доступа (для разных Auditor).

Возможное усложнение

Реализовать несколько видов итераторов (например: итератор, обходящий все доступные ключи; итератор, обходящий все ключи, но сигнализирующий об ошибке доступа при попытке обращения и т.д.).