![]() |
От: | 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. И теперь вопрос на засыпку: какого лешего? | |