我正在创建一个实现双链表的容器类。
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();
}
对于我想要使用它的每种类型,由于显而易见的原因,这很烦人。我该如何解决这个问题?