Comment appeler un non-const méthode à partir d'un const méthode?

J'ai un const méthode dans ma classe, qui ne peut pas être modifié à la non-const. Dans cette méthode, je dois appeler un non-const méthode, mais le compilateur ne me permet pas de le faire.

Est-il un moyen de contourner cela? Ici est simplifiée exemple de mon code:

int SomeClass::someMethod() const {
    QColor saveColor = color();
    setColor(QColor(255,255,255)); //Calling non-const method

    //....

    setColor(saveColor); //restore color

    return 1;
}
Ne serait-il pas à l'encontre de la règle fondamentale de l'être const fonction ?
de l'extérieur, c'est un const fonction que rien de visible pour le client a été changé.
Le mutable mot-clé permet de modifier les données dans un const méthode, mais personne ne suggère de cesser d'utiliser mutable et de modifier la méthode de la non-const. En tant que programmeur, je sais que je suis en définissant une couleur, puis la restauration de cette couleur. Je sais que les données n'a pas été changé, donc je suis à la recherche d'un moyen d'indiquer que pour le compilateur.
ce que vous dites est vrai, mais si quelqu'un crée un const instance de SomeClass, alors il est défini comportement de modifier ses mutable membres, mais UB à modifier son non-mutable membres. Par conséquent, il existe une différence importante entre la situation vous avez réellement, et la situation que vous comparez. L'effet de marquage someMethod const est de permettre aux appelants de l'appeler sur const objets, ainsi que de l'appeler sur la non-const objets à l'aide de références-à-const, et vous ne pouvez pas séparer les deux. Jetant const repose sur l'appelant uniquement à l'aide de la fonction sur la non-const objets.
Une solution possible est de modifier le code dans // .... de sorte qu'il n'est pas nécessaire d'utiliser de l'objet courant "de couleur". Ajouter les versions de toutes les fonctions que vous utilisez, que de prendre un QColor paramètre à la place. Qui s'appuie sur le pouvoir de changer les interfaces utilisées dans le code caché, bien sûr. Elle peut aussi avoir un comportement différent dans votre code, si // .... jette alors l'objet de la couleur a été modifiée, alors que vous, vous perdrez cet effet, à ma suggestion.

OriginalL'auteur this.lau_ | 2011-11-30