Bonjour,

J'ai deux questions :

- Quel est le meilleur moyen de borner un type ?

Par exemple un int compris dans l'intervalle [a,b], y a-t-il une meilleure solution que quelque chose du genre std::max(a,std::min(i,b)) ?

- Comment éviter de "dépasser" un type ?

Ex :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
typedef unsigned char byte;
byte a = 128;
a += 128;  //a=0;
Faut-il créer un wrapper qui redéfinisse les opérateurs avec des tests du genre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
//addition
T& operator +=(const T& other) {
  T d = std::numeric_limits<T>::max() - *this;  //espace restant
  if (other>=d)
    *this = std::numeric_limits<T>::max();
  else
    *this += other;
  return *this;
}
Est-ce une solution portable pour tous les types ? Y a-t-il une solution moins gourmande ?
Existe-t-il une implémentation performante pour ce genre de problèmes dans une librairie ?

Merci !