Types bornés : conseils, librairie
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:
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:
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 !