URL: https://linuxfr.org/forums/programmation-c/posts/appeler-une-methode-non-const-a-partir-de-la-methode-const-homonyme Title: Appeler une méthode non-const à partir de la méthode const homonyme Authors: arnaudus Date: 2014年01月08日T16:34:53+01:00 License: CC By-SA Tags: const et cast Score: 1 Histoire de ne pas mourir idiot, je me demandais s'il y avait un moyen élégant d'appeler une méthode const à partir de son équivalent non-const. Le contexte ressemble à ça: ```C++ #include #include #include using namespace std; class A { public: A(vector); double mean(); double mean() const; protected: void initialize(); bool is_initialized; const vector data; double sum_i; }; A::A(vector d) : data(d) { sum_i = 0.0; is_initialized = false; } void A::initialize() { for (unsigned int i = 0; i < data.size(); i++) { sum_i += data[i]; } is_initialized = true; } double A::mean() const { assert(is_initialized); return(sum_i / data.size()); } double A::mean() { if (!is_initialized) { initialize(); } return(static_cast(*this).mean()); // <- c'est là qu'est l'os! } int main() { vector notes; notes.push_back(10.0); notes.push_back(13.0); notes.push_back(3.5); A A1(notes); cout << A1.mean() << endl; const A A2(A1); cout << A2.mean() << endl; return(0); } ``` Je ne sais pas si je préfère le cast vers le const ou la duplication de code, les deux me semblent mochissimes. Est-ce une mauvaise utilisation de l'overloading sur const? J'avais pourtant l'impression que c'était légitime dans ce contexte (besoin d'un état particulier de l'objet pour exécuter la fonction; mettre l'objet en état et lancer la fonction const dans la fonction non-const, avorter l'exécution dans un contexte const si l'objet n'est pas dans le bon état).

AltStyle によって変換されたページ (->オリジナル) /