Je crée une classe de conteneur qui implémente une liste double liée.Égalité d'itérateur
template <class T>
class dl_list {
public:
class link {
public:
T* data;
link *prev, *next;
};
class iterator {
link* node;
public:
link* get_node() { return node; }
// ++, --, * operators, etc.
};
// other stuff
};
Jolie, je m'amuse avec. Mais un problème que j'ai est quand je définis mes opérateurs d'égalité pour le type d'itérateur, je dois faire une spécialisation de modèle.
template <class T>
bool operator==(typename dl_list<T>::iterator& lhv, typename dl_list<T>::iterator rhv) {
return lhv.get_node() == rhv.get_node();
}
ne fonctionnera pas, je dois spécialiser comme ceci:
bool operator==(typename dl_list<int>::iterator& lhv, typename dl_list<int>::iterator rhv) {
return lhv.get_node() == rhv.get_node();
}
pour chaque type que je veux l'utiliser pour, ce qui est gênant pour des raisons évidentes. Comment puis-je contourner cela?
fonctionne de la même manière que de surcharger ':: operator =='? Je ne veux pas avoir à appeler 'it1.operator == (it2)' explicitement. – anthropomorphic
Oui. La recherche d'opérateur surchargée comprend les opérateurs membres. – Puppy
Génial. Je l'ai juste essayé et ça fonctionne implicitement. 'it1 == it2' appellera' it1.operator == (it2) 'dans les coulisses. +1 merci. – anthropomorphic