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 :

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;
}
Les classes A et B contiennent un objet de type Position qui contient deux entiers x et y.

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.

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 ?)
}
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
Toto t;

t.getEntityAt(2,3);   // error: no matching function for call to `Toto::getEntityAt(int, int)'
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.. :-/