• [^] # Re: C'est vrai que c'est plus verbeux en c++

    Posté par (site web personnel) . En réponse au journal Sortie de GHC 8.0.2 et une petite histoire de typage statique. Évalué à 2.

    Voici ma version: moins verbeuse. Pas si différent de l'example.

    #include <iostream>
    #include "boost/variant.hpp"
    #include <boost/hana/functional/overload.hpp>
    using namespace std::string_literals;
    struct NombreFixé { int nombre; };
    struct NombreMaximumHardware {};
    struct PasDeThreading {};
    struct CasParticulier {};
    using PolitiqueThread = boost::variant<NombreFixé, NombreMaximumHardware, PasDeThreading, CasParticulier>;
    int main()
    {
     PolitiqueThread threadCount = NombreFixé{10};
     std::cout << boost::apply_visitor(boost::hana::overload(
     [] (NombreFixé f) { return "nombre fixé à "s + std::to_string(f.nombre); },
     [] (NombreMaximumHardware) { return "Fait chauffer la ferme de calcul"s; },
     [] (PasDeThreading) { return "Plutôt tranquille"s; },
     [] (CasParticulier) { return "Celui-ci je ne l'aime pas"s; }
     ), threadCount) << std::endl;
    };

    Résultat: http://melpon.org/wandbox/permlink/LH6QB4tOXjSYpLGz

    (Note: cet exemple ne fonctionne que avec clang car GCC ne supporte pas les accents dans les nom de types)

    On pourrait ajouter un constructeur à NombreFixé avec un assert pour s'assurer que la valeur est correcte.