Я создаю контейнерный класс, который реализует двойной связанный список.Итерационное равенство
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
};
Довольно аккуратно, мне весело с ним. Но одна проблема, с которой я столкнулась, - это когда я определяю свои операторы равенства для типа итератора, мне нужно сделать специализированную специализацию.
template <class T>
bool operator==(typename dl_list<T>::iterator& lhv, typename dl_list<T>::iterator rhv) {
return lhv.get_node() == rhv.get_node();
}
не будет работать, я должен специализироваться это так:
bool operator==(typename dl_list<int>::iterator& lhv, typename dl_list<int>::iterator rhv) {
return lhv.get_node() == rhv.get_node();
}
для каждого типа я хочу использовать его для, который является раздражающим по очевидным причинам. Как мне обойти это?
это будет работать так же, как перегрузка ':: operator =='? Я не хочу, чтобы я вызывал 'it1.operator == (it2)' явно. – anthropomorphic
Да. Перегруженный поиск оператора включает операторы-члены. – Puppy
Awesome. Я просто попробовал, и это работает неявно. 'it1 == it2' будет вызывать' it1.operator == (it2) 'за кулисами. +1 спасибо. – anthropomorphic