Tu peux t'en sortir avec
Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 template<class Integer0, Integer0 min0, Integer0 max0> static constexpr bounded_integer unsafe_create(bounded_integer<Integer0,min0,max0> i) noexcept { assert(i.data >= min); assert(i.data <= max); return bounded_integer{i.data}; }
Ce qui permet de remplacer les bounded_integer::if_less_than_then_else par :
Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 if (0<=unEntier && unEntier<10) { auto i = bounded_integer<int, 0, 9>::unsafe_create(unEntier); return ConvertirNombreEntre0et9(i); } if (10<=unEntier && unEntier<20) { auto i = bounded_integer<int, 10, 19>::unsafe_create(unEntier); return ConvertirNombreEntre10et19(i); } if (20<=unEntier && unEntier<70) { auto i = bounded_integer<int, 20, 69>::unsafe_create(unEntier); return ConvertirNombreEntre20et69(i); } if (70<=unEntier && unEntier<80) { auto i = bounded_integer<int, 70, 79>::unsafe_create(unEntier,unContexte); return ConvertirNombreEntre70et79(i); } if (80<=unEntier && unEntier<90) { auto i = bounded_integer<int, 80, 89>::unsafe_create(unEntier,unContexte); return ConvertirNombreEntre80et89(i); } if (90<=unEntier && unEntier<100) { auto i = bounded_integer<int, 90, 99>::unsafe_create(unEntier,unContexte); return ConvertirNombreEntre90et99(i); }
C'est un peu mieux.
Personnellement je trouve qu'un constructeur explicite est suffisant, mais pourquoi pas.
Ce qui me dérange c'est qu'elles induisent une syntaxe beaucoup moins élégante (je sais que tu en as besoin pour vérifier que les "- 70", "-80"... restent dans les bornes, mais c'est quand même moche).
- À condition que bounded_integer soit correct. Je vois déjà un bogue avec divide si N est négatif (les bornes min et max du resultat sont inversées)
- À condition que l'utilisateur de bounded_integer aie suffisamment de discipline pour ne pas toujours utiliser [0,99] (c'était partiellement le cas dans la version précédente)
- Le jeu en vaut-il la chandelle ? De mon point de vue, non avec une telle syntaxe. Peut-être avec un raffinement de constexpr dans les nouvelles normes (typiquement surcharge avec un paramètre constexpr comme le sont "- 70", "-80"...) Et encore, je pense que l'approche est trop rigide.
Partager