LINUX.ORG.RU

История изменений

Исправление fsb4000, (текущая версия) :

А можешь разжевать, что там происходит?

Насколько я понимаю, типа такого:

std::variant<T2, Error> res(T arg)
{
    auto r = doJob(arg);
    if (std::holds_alternative<Error>(r)) return std::get<Error>(r);

    auto r2 = doJob2(r);
    if (std::holds_alternative<Error>(r2)) return std::get<Error>(r2);

    auto r3 = doJob3(r2);
    if (std::holds_alternative<Error>(r3)) return std::get<Error>(r3);

    return r3;
}

Исправление fsb4000, :

А можешь разжевать, что там происходит?

Насколько я понимаю, типа такого:

std::variant<T2, Error> res(T arg)
{
    auto r = doJob(arg);
    if (std::holds_alternative<Error>(r)) return std::get<1>(r);

    auto r2 = doJob2(r);
    if (std::holds_alternative<Error>(r2)) return std::get<1>(r2);

    auto r3 = doJob3(r2);
    if (std::holds_alternative<Error>(r3)) return std::get<1>(r3);

    return r3;
}

Исправление fsb4000, :

А можешь разжевать, что там происходит?

Насколько я понимаю, типа такого:

std::variant<T2, Error> res(T arg)
{
    auto r = doJob(arg);
    if (!r.has_value()) return r.Error;

    auto r2 = doJob2(r);
    if (!r2.has_value()) return r2.Error;

    auto r3 = doJob3(r2);
    if (!r3.has_value()) return r3.Error;

    return r3;
}

Исходная версия fsb4000, :

А можешь разжевать, что там происходит?

Насколько я понимаю, типа такого:

std::optional<T2> res(T arg)
{
    auto r = doJob(arg);
    if (!r.has_value()) return {};

    auto r2 = doJob2(r);
    if (!r2.has_value()) return {};

    auto r3 = doJob3(r2);
    if (!r3.has_value()) return {};

    return r3;
}

(у последнего let! r3, можно было не писать !, тогда бы не было последнего if)