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...)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
struct M2 : public M
{
    void Normalize() const;
};
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).

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 '/':
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
struct M : public autre_classe
{
    M operator / ( double v ) const;
};
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
5
void M2::Normalize() const
{
    double k = ... // on calcule la bonne valeur
    *this = *this / k;
}
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é...

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.