Forum Clubic

[résolu][C++/borland] Template & objet constant

Bonjour, j’ai une fonction template (un peu old school mais j’ai pas la choix) qui me cherche un maximun dans un voisinage de 9 (j’ai simplifié).

A la compilation (borland builder 6) j’ai un joli message d’erreur me disant impossible de modifier un objet constante…


//Maxi 3x3
template<class T>
void maxi(T *ptr)
{
T m=*ptr;
if (m<*(ptr-1))    m=*(ptr-1); //L'erreur est là
if (m<*(ptr+1))   m=*(ptr+1);
return m
}

Mon T est de type const(obligé), c’est ça qui fous tout en l’air.
Y a t’il une solution pour déclarer la variable m en non const?

Question conne : tu peux renvoyer un pointeur sur l’objet T? Sinon, faut passer par les const_cast (je sais pas si ça fera l’affaire)

Sinon, j’ai des doutes quant à une fonction renvoyant un objet m, et étant déclarée void :slight_smile:

Dans l’exemple que j’ai donné je pourrais renvoyer un pointeur mais j’ai d’autres fonctions du même type qui font des opérations avant de renvoyer une valeur.

Const_cast > j’essaie

Arf le probleme du const_cast c’est qu’il lui faut un type de destination, or celui que je veut c’est le type T mais pas const :pt1cable:

const_cast<<type>>(<value>);

Sinon je pourrai peut être passer à ma fonction un parametre "fake" de type T (pas const).

tu l’utilises comment la fonction (ça fait longtemps que j’ai pas fait de c++)

J’ai résolu mon pb comme ça:

template <class T,class X>
T maxi(T *ptr, X truc_bidon)
{
X m;
m=*ptr;
m=(m>*(ptr+nx))?m:*(ptr+nx);
m=(m>*(ptr-nx))?m:*(ptr-nx);

return m;
}

void fonction_appelante(Timg<T>**in)
{
T const*const* dataIn=in[0]->const_loadAll(); //ici j'ai pas le choix
T fake;
T const*ptr2= dataIn[20];

maxi(ptr2,fake);
}

Bricolage, quand tu nous tiens…