Bonjour,
J'ai un problème avec une méthode 'const':
Soit une classe M2 (qui représente une matrice), qui dérive d'une classe M. Cette classe dispose d'une méthode de normalisation, qui doit... normaliser, c'est à dire modifier la valeur des attributs, mais sans changer la "valeur globale" (ceux qui ont entendus parler de coordonnées homogènes me comprendront, pour les autres, c'est pas grave...)
Cette méthode doit être 'const' parce qu'utilisée dans d'autre méthodes 'const'. En général, la parade consiste à déclarer les attributs concernés comme 'mutable'. Oui, mais ici, on n'y a pas accès, ils sont hérités (et on ne peux pas modifier la classe de base M).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 struct M2 : public M { void Normalize() const; };
Cette normalisation consiste à diviser tous les termes par un coefficient, et pour ça, la classe de base me fournit une surdéfinition de l'opérateur '/':
Ce que je veut écrire comme implémentation, c'est quelque chose comme:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 struct M : public autre_classe { M operator / ( double v ) const; };
Mais évidemment, le compilo me jette, car this est un pointeur 'const', et donc interdit d'utiliser l'opérateur d'affectation sur this déréferencé...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 void M2::Normalize() const { double k = ... // on calcule la bonne valeur *this = *this / k; }
Je me doute qu'il y a une bidouille à faire avec un const_cast, mais j'ai essayé plusieurs trucs, et je n'arrive pas à m'en sortir. Il faudrait que je puisse enlever le caractère 'const' de this, mais je ne suis pas sûr que ça soit possible.
Je patauge un peu, là, merci pour votre aide.
Partager