Bonjour,
Voici un petit bout de code, les explications suivront celui-ci :
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 class Activity { int order; std::string action; public: ... bool operator==(const Activity &activity) const { return activity.isOrder(order) && activity.isAction(action); }; }
Si Vertex = int, je me vois de laisser une comparaison sans pointeur (v == v2).
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;
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) :
Mais la comparaion (v == v2) échoue.
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); };
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 !
Partager