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 : :
Le compilateur n’a tout à fait tord, mais a la compilation une fois le code déroulé, ma variable litigieuse devient une constante.
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 // Jaimerais 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 ... }
Partager