разница между transform и and_then
От: sergii.p  
Дата: 11.08.25 16:34
Оценка: +2
тут в последнее время любят поднимать тему нелогичности в языке. Я продолжу эту славную традицию

struct Foo { 
    double val; 
    std::optional<double> opt;
};

int main()
{
    const std::optional<Foo> o = Foo{0, std::nullopt};
    return o.transform(std::mem_fn(&Foo::val)).value_or(0); //1
    return o.and_then(std::mem_fn(&Foo::opt)).value_or(0); //2
}


Попробуйте ответить, какие строчки некорректны с т.з. компилятора.
  Ответ:
Строчка 1 некорректна. transform не может принимать функцию, которая возвращает ссылку
Строчка 2 корректна. and_then на это ограничение глубоко фиолетово.
Как бы оба участка кода идейно похожи. Оба пропускают через себя внутренний член объекта, оба для экономии места используют mem_fn.
И теперь вопрос на засыпку: какого лешего?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.