1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| //La version const reste const-correcte jusqu'au bout
//et n'utilise aucun const_cast.
template<class T>
T const & Liste<T>::operator[](int i) const
{
T const * pCurr = &m_tete;
while(pCurr && i--){
pCurr = pCurr->pNext;
}
return * pCurr;
}
//La version non-const appelle la version const
//et const_caste la référence retournée.
template<class T>
T & Liste<T>::operator[](int i)
{
//NOTE: On const_caste toujours le pointeur retourné,
// et jamais this!
Liste< T > const * thisC = this;
T const & ret = (*thisC)[i];
return const_cast< T & >(ret);
} |
Partager