Hello, je débute en C++, et me voila déjà bloqué

Je cherche à utiliser un comparateur avec template, pour trier des tableaux.

Cependant, je ne sais pas comment dire à mon compilo qu'une de mes variables local est en vérité un intervalle défini par un template.

Voici la partie du code qui pose problème : :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
30
31
 
template <int DIMCOUNT> class MyClass // 1er template
{
	typedef Node....
	indexs *....
 
	...
	// Fonction de comparaison<CurrentDim>
	template <int CurentDim>
		struct My_less_equal: public std::binary_function<Node, Node, bool> {
			bool operator()(const Node& _Left, const Node& _Right) const {
				return (_Left.data[CurDim] <= _Right.data[CurDim]);
			}
	};
 
 
	....
	// ici le problème
	for (unsigned i=1; i<DIMCOUNT; i++) {
		std::sort(indexs[i][0], indexs[i][size], My_less_equal<i>());
		// error C2971 une variable local ne peut pas être utilisé comme argument
	}
	// ne fonctionne pas
 
	// J’aimerais qu'il fonctionne de la même manière que:		
	std::sort(indexs[0][0], indexs[0][size], My_less_equal<0>()); //=> ok
	std::sort(indexs[1][0], indexs[1][size], My_less_equal<1>()); //=> ok
	std::sort(indexs[2][0], indexs[2][size], My_less_equal<2>()); //=> ok
	// Version qui fonctionne pour DIMCOUNT = 3
	...
}
Le compilateur n’a tout à fait tord, mais a la compilation une fois le code déroulé, ma variable litigieuse devient une constante.