二重リンク リストを実装するコンテナー クラスを作成しています。
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
};
綺麗ですね、楽しんでます。しかし、私が抱えている問題の 1 つは、イテレータ型に対して等値演算子を定義するときに、テンプレートの特殊化を行う必要があることです。
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();
}
使用したいすべてのタイプに対して、これは明らかな理由で面倒です。どうすればこれを回避できますか?