Bonjour,

Voici un petit bout de code, les explications suivront celui-ci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
class Activity
{
    int order;
    std::string action;
public:
    ...
    bool operator==(const Activity &activity) const
    {
        return activity.isOrder(order) && activity.isAction(action);
    };
}
En fait, la classe Activity, comme d'autres classes, seront utilisés dans un graphe générique. Il y aura une recherche, finissant par une comparaison, ce qui m'amène pour un type template Vertex à faire comme tel :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
template<class Vertex>
class Graph { ... };
...
template<class Vertex>
bool Graph<Vertex>::isValid(Vertex v)
{
    // recherche
    return (v == v2);
}
...
Graph<int> integerGraph;
Graph<Activity *> activityGraph;
Si Vertex = int, je me vois de laisser une comparaison sans pointeur (v == v2).
Mais si Vertex = Activity*, cette comparaison ne marche pas, car il faudrait alors (*v == *v2) qui, elle, fonctionne.
J'ai cru pouvoir résoudre le problème en redéfinissant l'opérateur == dans la classe Activity d'une autre manière (déréférencé le pointeur grâce à l'argument) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
    bool operator==(const Activity *activity) const
     {
         return activity->isOrder(order) && activity->isAction(action);
     };
Mais la comparaion (v == v2) échoue.
C'est indispensable pour moi de trouver une déclaration de l'opérateur == dans la classe Activity qui me permet de garder le format de comparaison (v == v2) lors de la recherche dans la classe Graph.
J'espères que vous aurez une solution pour moi. Merci d'avance pour votre aide !