Bonsoir,
Actuellement je développe un petit projet, mais je bloque sur une méthode particulière. J'aimerais créer une méthode qui retourne un objet dont on ne connait pas le type à l'avance. J'ai alors pensé aux templates, mais je ne pense pas que se soit la bonne solution :
Voici ma classe principale :
Les classes A et B contiennent un objet de type Position qui contient deux entiers x et y.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 class Toto { public: ... template<class T> T const& getDataAt(int x, int y); private: vector<A*> vect_A; vector<B*> vect_B; }
La méthode en question getEntityAt recherche dans chacun des vecteurs si un objet contient les même coordonnées. Dans ce cas, elle renvoie une référence constante vers cet objet.
Malheureusement, cela ne marche pas. Si je fais appel à la méthode getEntityAt de la classe Toto, il me dit qu'il ne trouve aucune fonction correspondante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 template<class T> T const& Toto::getEntityAt(int x, int y) { // Recherche dans le vecteur de A int sizeA= vect_A.size(); for (int i = 0; i < sizeA; i++) { if ((*vect_A[i]).getPosition().isEqual(x, y)) return vect_A[i]; } // Recherche dans le vecteur de B int sizeB= vect_B.size(); for (int i = 0; i < sizeB; i++) { if ((*vect_B[i]).getPosition().isEqual(x, y)) return vect_B[i]; } // Sinon, on retourne autre chose (exception why not ?) }
Auriez vous une idée de comment faire ? Dans le pire des cas, j'ai pensé a renvoyer un vecteur ne contenant qu'un seul élément (celui trouvé) ou aucun. Mais je trouve ça vraiment moche.. :-/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Toto t; t.getEntityAt(2,3); // error: no matching function for call to `Toto::getEntityAt(int, int)'
Partager