Optional<T>
Примечание
На момент публикации задания в вашем арсенале может не хватить приемов для оптимальной реализации типа. Цель — попробовать разные подходы и проанализировать их недостатки.
Цель
Спроектируйте шаблонный тип Optional<T>, передающий семантику наличия или
отсутствия значения произвольного типа.
Интерфейс
-
Optional(T &&value)
Конструктор. Подумайте также о Rule of Five.
-
bool has_value()
Возвращает
true, если в объекте есть значение.
-
operator bool()
Возвращает
true, если в объекте есть значение.
-
T &operator*()
Если значение есть, возвращает ссылку на него. Если значения нет, поведение не определено.
-
T &value()
Если значение еть, возвращает ссылку на него. Если значения нет, генерирует исключение.