4.1 Les opérateurs unaires

Par opérateur unaires, j’entends des opérateurs qui ne prennent qu'une seule opérande (comme -).

Commençons par une définition générale pour un opérateur unaire :

1
2
3
4
5
6
7
8
9
10
11
// Modèle de classe pour nos opérateurs unaires
template <class T, int Op>
struct UnaryOp {};

// Classe de base pour nos opérateurs unaires
template <class T>
struct UnaryOpBase{
	UnaryOpBase(T t) : It(t) {}
	inline void operator ++(){++It;}
	T It;
};

Et la spécialisation des opérateurs unaires Minus et Const :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Spécialisation pour le moins unaire - nous devrons spécialiser nos classes pour chaque opérateur
template <class T>
struct UnaryOp<T, Minus> : public UnaryOpBase<T>{
	UnaryOp(T t) : UnaryOpBase<T>(t){}
	inline double operator *(){return -(*UnaryOpBase<T>::It);}
};

// Spécialisation pour les constantes
template <class T>
struct UnaryOp<T, Const> : public UnaryOpBase<T>{
	UnaryOp(T t) : UnaryOpBase<T>(t) {}
	inline void operator ++(){}
	inline double operator *(){return UnaryOpBase<T>::It;}
};

Passons aux opérateurs binaires.