Getter/setter ou retour par copie/référence ?
Salut à toutes et à tous !
Je voudrais savoir si quelque chose vous choque dans le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class Demography{
public :
N_type pop_size(coord_type const& where, time_type time) const {
try{
return populations.at(time).at(where);
}
catch(const std::out_of_range& oor){
return 0.;
}
}
N_type& pop_size(coord_type const& where, time_type time) {
return populations[time][where];
}
private :
std::map<time_type, std::map<coord_type, N_type> > populations;
} |
J'utilise une version pour modifier l'objet dans une première phase
Code:
1 2 3
|
Demography demo;
demo.pop_size(x, t0+1) = round(Ntilde); |
et l'autre version constante pour lire les données qu'il contient dans un contexte où l'objet demo est passé par référence constante :
Code:
for(unsigned int ind=1; ind <= demo.pop_size(x, t0)){ // do something}
Du coup j'imagine que le compilateur sait à quelle version il a affaire (en tout cas le code marchait), et je suis un peu content quand même parce que l'écriture me semble intuitive (mais ça c'est mon avis de noob à moi ça hein :mrgreen: ). Mais on m'a fait remarqué qu'utiliser le même nom pour faire en fait un get ou un set pouvait être une mauvaise idée. Je me doute bien que rien n'est tout noir ou tout blanc... mais votre avis m'intéresse.
Bien à vous tous, et joyeux printemps :D
PS : j'avais vu passer un lien vers un fil de discussion qui abordait ce sujet en long en large et en travers, mais c'était il y a longtemps, je n'avais pas tout compris et je ne le retrouve plus... si quelqu'un sait à quoi mes souvenirs flous sont liés... :wink: