Вернёмся к вопросу: какую фундаментальную проблему это решает?
а тут что auto x = a? + b?;
Это очень плохо. Особенно для плюсов. Всегда хочется возможности переопределить поведение. Например я хочу чтоб в случае если нет объекта - вся функция возвращала nullopt. С такой же проблемой сталкивались и в шарпе, когда хотели завести оператор !!, но потом все таки одумались и поняли что надо думать над кастомизацией.
Пример: В сети есть устройство, которое если включено будет отвечать на команды, я отправляю запрос в сеть, ответ может прийти, а может не прийти, и вот если ответ пришёл я выполняю действия, если не пришёл - значит не выполняю Или читаю файл конфигурации, ключ - значение в новой версии протокола нет такого ключа, значит и значения я получить не могу, значит вмне вместо значения должен вернуться пустой объект
Тупые Java-пузики так и пишут, ничё, Ынтырпрайс получается.
это точно легче чем if(x) use(*x);?
во всяком случае then() гарантировано вызовет лямбду если опциональный тип не пустой
есть пропозал на monadic operations for optional, как раз это и позволяет сделать [p0798]
К сожалению, этот подход работает только в простых случаях. На практике слишком часто возникает желание форвардить оверлоад сет, а не через каст выбирать конкретную перегрузку.
Да, мне тоже, например, непонятно это. Сначала отодвинули на целый стандарт монадические операции в ожидании инструментов форварда оверлоад сетов, а потом забили и приняли как есть. Комитет продемонстрировал удивительно ловкий способ проиграть сразу по всем пунктам
Обсуждают сегодня