• [^] # Re: Liberté de l'utilisateur

    Posté par . En réponse au journal Gestion de l'erreur - C++ - std::optional. Évalué à 2.

    Crée ton optional avec levée d'exception si tu y accède alors qu'il n'existe pas, ou utilise value_or pour avoir une valeur avec du sens; je ne vois pas vraiment ce que l'on peut faire de mieux.

    Il vaut mieux lire l'interface exposée ici pour se faire une idée.

    http://en.cppreference.com/w/cpp/experimental/optional

    pour son exemple

    std::optional<D> foo(Arg arg)
    {
     auto fResO = f(arg);
     if(!fResO)
     {
     return std::optional<D>{}; // un optional vide
     }
     auto fRes = fResO.value();
     auto gResO = g(fRes);
     if(!gResO)
     {
     return std::optional<D>{}; // un optional vide
     }
     auto gRes = gResO.value();
     return std::optional<D>{h(gRes));
    }

    Je me contenterai de

    std::optional<D> foo(Arg arg)
    {
     try{
     return make_optional(h( g( f(arg).value() ).value())) ;
     }
     catch(Machin e)
     {
     return std::optional<D>();
     }
    }

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent