operator== : problème comparaison d'objets pointés
Bonjour,
Voici un petit bout de code, les explications suivront celui-ci :
Code:
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:
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:
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 !