Как я могу написать std::apply для std::expected?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу написать std::apply для std::expected?

Сообщение Anonymous »

В C++23 указано:

Код: Выделить всё

expected getA(const X& x);
expected getB(const Y& y);

C compute_all(const A& a, const B& b);
Есть ли способ избежать проверки классического стиля, например:

Код: Выделить всё

auto a_ret = getA(x);
if (!a_ret)
return a_ret.error();

auto b_ret = getB(y);
if (!b_ret)
return b_ret.error();

C final_ret = compute_all(*a_ret, *b_ret);
и напишите что-то вроде

Код: Выделить всё

expected final_ret = magic_apply(compute_all, getA(x), getB(y))
Это идея реализации Magic_apply, но мне нужно что-то более общее (возможно, с использованием вариативных шаблонов), которое позволяет передавать в Compute_all некоторый параметр, который не является стандартным:: ожидается.

Код: Выделить всё

template
auto magic_apply(Func func, const std::expected& a, const std::expected& b)
->
std::expected
{
if(!a) {
return std::unexpected{ a.error() };
}
if(!b) {
return std::unexpected{ b.error() };
}
return func(a.value(), b.value());
}
Существует ли какая-либо функция в языке, на котором я мог бы это написать?

Подробнее здесь: https://stackoverflow.com/questions/787 ... tdexpected
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»