je serais probablement résoudre cela avec un objet proxy:
class Xproxy
{
int& changeable;
int& unchangeable;
Xproxy(int& c, int& u) : changeable(c), unchangeable(u)
{}
Xproxy& operator=(int i)
{
changeable=i
return *this
}
operator int()
{
return unchangeable;
}
};
class X
{
int changeable[3];
int unchangeable[3];
Xproxy operator[](int i)
{
return Xproxy(changeable[i], unchangeable[i])
}
};
Alors maintenant, lorsque vous appelez l'opérateur [] sur X, vous obtenez un objet Xproxy qui a des références à l'intérieur à la fois les champs modifiables et invariables .
Si vous essayez d'assigner à l'objet Xproxy, il appellera l'opérateur = qui assigne à la référence à l'objet modifiable. Si vous essayez d'affecter l'objet Xproxy à un int, il appelle l'opérateur de distribution qui extrait le champ non modifiable.
Vous pouvez mettre en œuvre le premier cas, vous pouvez mettre en œuvre le second cas, mais pas les deux ensemble – Gaim
Il peut surcharger l'opérateur et il peut choisir en fonction du contexte. – JSchlather