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
|
template <class T, int Op>
struct UnaryOp {};
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
|
template <class T>
struct UnaryOp<T, Minus> : public UnaryOpBase<T>{
UnaryOp(T t) : UnaryOpBase<T>(t){}
inline double operator *(){return -(*UnaryOpBase<T>::It);}
};
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.
|