4.4 Surcharge des opérateurs indépendants de PVector

Toutes ces surcharges sont indépendantes de PVector :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
///Surcharge de l'opérateur + pour deux types abstraits
template <class T, class U>
BinaryOp<T, U, Add> operator +(const T& v1, const U& v2){
	return MakeAdd(v1, v2);
}

///Surcharge de l'opérateur - pour deux types abstraits
template <class T, class U>
BinaryOp<T, U, Sub> operator - (const T& v1, const U& v2){
	return MakeSub(v1, v2);
}

///Surcharge de l'opérateur - pour un type abstrait
template <class T>
UnaryOp<T, Minus> operator - (const T& v1){
	return MakeMinus(v1);
}

///Surcharge de l'opérateur * pour un type abstrait à gauche et un double (en dur je sais, mais c'est déjà bien pour faire des tests)
template <class T>
BinaryOp<T, UnaryOp<double, Const>, Mult> operator * (const T& v1, double d){
	return MakeMult(v1, MakeConst(d));
}

///Surcharge de l'opérateur * pour un type abstrait à droite et un double (en dur je sais, mais c'est déjà bien pour faire des tests)
template <class T>
BinaryOp<UnaryOp<double, Const>, T, Mult> operator * (double d, const T& v1){
	return MakeMult(MakeConst(d), v1);
}