Ta proposition est intéressante pour ne pas se planter lors de l'appel, mais elle ne protège pas dans l'interne de la classe Test car finalement on y retrouve les valeurs sentinelles (1 et 255). Note que dans l'exemple que je donne, 1 thread n'est pas la même chose que pas de parallélisme et 255 threads (possible bientôt avec l'arrivée des puces intel) n'est pas la même chose que "Maximum système".
Un développeur pourra d'ailleurs facilement se tromper en créant 255 threads au lieu des 8 qui ma machine peut largement supporter.
Cette solution ne permet pas non plus de récupérer de façon exploitable facilement le réglage, tu ne peut pas faire de fonction qui renvoie l'un des tags.
Une solution serait l'utilisation de variant tel que :
#include<iostream>#include<boost/variant.hpp>structFixed{constint_n;};structMax{};structNoMultithread{};usingSetting=boost::variant<Fixed,Max,NoMultithread>;structTest{explicitTest(Settings):setting(s){}Settingsetting;};intmain(){Testt1{Fixed{10}};Testt2{Max{}};Testt3{NoMultithread{}};Testt4{Fixed{-10}};structvisitor:boost::static_visitor<std::string>{std::stringoperator()(constFixed&)const{return"C'est fixé";}std::stringoperator()(constMax&)const{return"Max";}std::stringoperator()(constNoMultithread&)const{return"c'est un NoMultiThread";}};std::cout<<boost::apply_visitor(visitor(),t1.setting)<<std::endl;std::cout<<boost::apply_visitor(visitor(),t2.setting)<<std::endl;std::cout<<boost::apply_visitor(visitor(),t3.setting)<<std::endl;std::cout<<boost::apply_visitor(visitor(),t4.setting)<<std::endl;return0;}
Cette solution apporte la même souplesse et la même sécurité que les ADT, mais dieu que c'est verbeux ;)
[^] # Re: C'est vrai que c'est plus verbeux en c++
Posté par Guillaum (site web personnel) . En réponse au journal Sortie de GHC 8.0.2 et une petite histoire de typage statique. Évalué à 3.
Ta proposition est intéressante pour ne pas se planter lors de l'appel, mais elle ne protège pas dans l'interne de la classe
Testcar finalement on y retrouve les valeurs sentinelles (1et255). Note que dans l'exemple que je donne,1thread n'est pas la même chose que pas de parallélisme et255threads (possible bientôt avec l'arrivée des puces intel) n'est pas la même chose que "Maximum système".Un développeur pourra d'ailleurs facilement se tromper en créant 255 threads au lieu des 8 qui ma machine peut largement supporter.
Cette solution ne permet pas non plus de récupérer de façon exploitable facilement le réglage, tu ne peut pas faire de fonction qui renvoie l'un des tags.
Une solution serait l'utilisation de
varianttel que :Cette solution apporte la même souplesse et la même sécurité que les ADT, mais dieu que c'est verbeux ;)