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]; }