Maison > développement back-end > C++ > Comment pouvons-nous gérer avec élégance les méthodes Getter Const et Non Const en double ?

Comment pouvons-nous gérer avec élégance les méthodes Getter Const et Non Const en double ?

Susan Sarandon
Libérer: 2024-12-04 00:39:09
original
641 Les gens l'ont consulté

How Can We Gracefully Handle Duplicate Const and Non-Const Getter Methods?

Gestion gracieuse des getters en double, const et non const

En tant que programmeurs, nous rencontrons souvent le problème d'avoir à la fois const et non const -versions const des méthodes getter dans nos classes. Bien que leur mise en œuvre séparément puisse conduire à une duplication de code, trouver une solution élégante à cette énigme peut s'avérer difficile.

Le défi

Dans l'exemple fourni, la classe Foobar nécessite deux méthodes getSomething() : une non-const (Something& getSomething(int index)) et une const (const Something& getSomething(int index) const). Cependant, essayer d’implémenter ces méthodes avec les autres entraîne inévitablement des erreurs du compilateur. Caster la version non-const à partir de la version const est également un mal nécessaire.

La solution élégante

Bien qu'une solution absolument parfaite ne soit pas réalisable, le plus souvent L'approche recommandée consiste à supprimer le const de l'autre fonction. Bien que ce ne soit pas vraiment esthétique, il s'agit d'une technique sûre puisque la fonction membre appelante n'est pas const, ce qui signifie que l'objet lui-même n'est pas const et que la suppression de la const est autorisée.

Considérez l'extrait de code suivant comme un exemple :

class Foo
{
public:
    const int& get() const
    {
        // non-trivial work
        return foo;
    }

    int& get()
    {
        return const_cast<int&>(const_cast<const Foo*>(this)->get());
    }
};
Copier après la connexion

Dans cet exemple, la version non-const de get() supprime le const de la version const, lui permettant de modifier le objet lui-même.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal