Agir sur des instances de manière générale
Bonjour à tous,
Ma question va peut être paraitre stupide, mais j'ai du mal à trouver après moult recherches comment résoudre ce simple problème :
J'ai une classe qui contient un objet et une map :
Code:
1 2 3 4 5 6 7 8
| class Salle {
private:
Personne *personne;
map<char*,Objet*> *listeObjets;
public:
bool regarder(Personne*,Objet*);
void boucle();
}; |
Le soucis c'est la fonction regarder(), comment je peux faire en sorte d'utiliser cette fonction pour qu'elle agisse sur n'importe qu'elle instance de la classe Objet ?
En gros si je crée plusieurs objets (en alimentant ma map) :
Code:
1 2 3 4 5
| Salle::Salle() {
listeObjets["objet1"] = new Objet(1,"Chaise");
listeObjets["objet2"] = new Objet(2,"Table");
listeObjets["objet3"] = new Objet(3,"Armoire");
} |
comment je peux faire que je puisse utiliser regarder() avec comme deuxième paramètre une sorte de référence à la classe, un joker, donc que je ne sois pas obligé d'appeler cette fonction pour chaque instance qui se trouvent dans la map ?
Faire quelque chose comme ça :
Code:
1 2 3 4 5 6 7
| void Salle::boucle() {
while(true) {
// Ici l'action se déclenche quand la personne regarde un Objet sans savoir duquel il s'agit
if(regarder(personne,**Objet**)) {
cout << "La personne regarde un objet" << endl;
}
} |
Au lieu de ça :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| void Salle::boucle() {
while(true) {
// Ici l'action se déclenche quand la personne regarde un Objet sans savoir duquel il s'agit
if(regarder(personne,listeObjets["objet1"])) {
cout << "La personne regarde un objet" << endl;
}
if(regarder(personne,listeObjets["objet2"])) {
cout << "La personne regarde un objet" << endl;
}
if(regarder(personne,listeObjets["objet3"])) {
cout << "La personne regarde un objet" << endl;
}
} |
Surtout que le nombre d'objet peut varier...
J'espère que j'ai été clair dans l'explication du problème, merci d'avance pour votre aide.