dimanche 20 juillet 2008

Des nombres fortement typés

Je viens de terminer mon dernier test unitaire (vive la Boost Test Library!) sur ma classe de nombres fortement typés. L'idée est, comme pour les identifiants, d'éviter de s'emmêler les pinceaux en comparant ou effectuant d'autres opérations sur des nombres qui n'ont rien à voir. C'est à dire que quand j'ajoute des choux et des carottes, je veux que le compilo gueule bien fort.

Le souci, c'est qu'il faut ajouter à notre classe de nombres forts tous les opérateurs généralement présents sur les nombres, et il y en a un paquet. Heureusement, vive la Boost Operators Library vient à notre rescousse, en déduisant tout un tas d'opérateurs à partir d'une liste restreinte à implémenter.


template<typename D, typename T>
class Number : boost::operators<Number<D, T> >
{
public:
Number();
Number(const Number & n);
Number(const T & value);

bool operator<(const Number & n) const;
bool operator==(const Number & n) const;
Number & operator+=(const Number & n);
Number & operator-=(const Number & n);
Number & operator*=(const Number & n);
Number & operator/=(const Number & n);
Number & operator%=(const Number & n);
Number & operator|=(const Number & n);
Number & operator&=(const Number & n);
Number & operator^=(const Number & n);
Number & operator++();
Number & operator--();

T getValue() const;

private:
T m_value;
};


Et avec ceci, les opérations +, -, *, / et les autres sont toutes définies gentiment.

Aucun commentaire: