Je peux encore une fois essayer de t'expliquer mon problème si tu y tiens !
Si tu veux tous les détails, c'est un projet avec la SDL.
J'ai une classe Personnage, qui possède plusieurs attributs comme age, taille, poids, origine, intelligence, ... Il y a je dirais une vingtaine d'attributs.
À ce moment, j'ai déjà un moyen "propre" de récupérer les valeurs de ces attributs privés : les getters.
Sauf que si je veux afficher, disons, l'âge, la taille et le poids d'une personne, je dois écrire :
getAge();
getTaille();
getPoids();
Et puis si deux minutes après je décide d'afficher plutôt l'origine, la beauté et le charme de la personne, alors je dois effacer ces lignes et en récrire trois autres.
Bref on voit tout de suite qu'il y a plus pratique. Ce que je faisais jusqu'ici, c'est que je créais un booléen pour chaque attribut, par exemple aff_taille, puis une fonction afficher() du style :
void afficher(){
if(aff_taille)afficher_sur_la_surface_SDL(getTaill
e());
.
.
.
if(aff_poids)afficher_sur_la_surface_SDL(getPoids(
));
}
Je trouve que cette solution n'est pas élégante : si demain je décide de rajouter de nouveaux attributs à la classe Personnage, je devrais rajouter autant de nouvelles lignes à toutes les fonctions d'affichage.
En fait, pour généraliser, je me suis dit qu'il serait tellement plus pratique de posséder une manière de donner à une fonction d'affichage :
- Un objet
- Un attribut de cet objet
Sans spécifier dans la définition QUEL objet ni QUEL attribut. Ainsi pour la maintenance, je m'en lave les mains (à part dans les cas - ultras rares dans mon projet - où le type de l'attribut doit être géré d'une manière exceptionnelle par la fonction d'affichage sur la surface SDL.
Et du coup dans mon programme, si je décide d'afficher l'age et l'odeur de la personne anne, je ferais appel à ma fonction (celle que je désirais et pour laquelle j'ai créé ce post) :
afficher(anne, &anne::age, &anne::odeur);
Voilà, maintenant je ne suis pas du tout programmeur, peut-être que tout ça est débile, je ne prétend pas du tout en savoir plus que quiconque ici^^ Je cherchais un moyen de faire ce que je voulais, et j'ai trouvé. Peut-être que la solution qui m'a été proposée est dégeulasse, j'en sais rien, mais elle est efficace en tout cas. Parce qu'elle marche comme je le désirais et c'est un fait. Et puis, même pour plus tard, qui sait, un jour je serais confronté à un cas où ce genre de solutions est réellement indispensable ?