Comment éviter la duplication de code par l’opérateur ou la méthode pour les objects const et non const?

Dupliquer possible:
Comment supprimer la duplication de code entre des fonctions membres const et non const similaires?

Ma tâche consiste à implémenter l’analogue vectoriel c ++. J’ai codé l’opérateur [] pour 2 cas.

T myvector::operator[](size_t index) const {//case 1, for indexing const vector return this->a[index]; } T & myvector::operator[](size_t index) {//case 2, for indexing non-const vector and assigning values to its elements return this->a[index]; } 

Comme vous pouvez le constater, le code est complètement égal. Ce n’est pas un problème pour cet exemple (une seule ligne de code), mais que dois-je faire si je dois implémenter un opérateur ou une méthode pour les cas const et non-const et renvoyer const ou valeur de référence, respectivement? Copiez-collez tout le code à chaque fois que j’y apporte des modifications?

Une des rares bonnes utilisations de const_cast ici. Ecrivez votre fonction non const comme d’habitude, puis écrivez votre fonction const comme suit:

 const T & myvector::operator[](size_t index) const { myvector * non_const = const_cast *>(this); return (*non_const)[index]; }