Template à valeur pseudo-Dynamique.
Hello, je débute en C++, et me voila déjà bloqué :roll:
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:
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
...
} |
Le compilateur n’a tout à fait tord, mais a la compilation une fois le code déroulé, ma variable litigieuse devient une constante.
Re: Template à valeur pseudo-Dynamique.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| struct My_less_equal: std::binary_function<Node, Node, bool>
{
My_less_equal(ssize_t dim) : dim_(dim) {}
bool operator()(const Node& _Left, const Node& _Right) const
{ return (_Left.data[dim_] <= _Right.data[dim_]); }
private:
ssize_t dim_;
};
...
for (ssize_t i=1; i<DIMCOUNT; ++i)
{
std::sort(indexs[i][0], indexs[i][size], My_less_equal(i));
} |
?
Mais ces manips me paraissent suspicieuses. Probablement de ne pas connaitre les types manipulés, ni ce qui doit être trié.