これは完全に機能します:
list<int> l;
list<int>::const_iterator it;
it = l.begin();
list<int>::iterator it2;
it2 = l.begin();
私が得られないのは、バージョンまたはバージョンlist
を返さなければならないことを「知っている」方法です。iterator begin()
const_iterator begin() const
コンテナー (トライ) のイテレーターを実装しようとしていますが、この問題が発生しています。C++ は戻り値の型による差別化を処理するべきではありませんか (変なトリックを使用する場合を除く)。
ここにいくつかのコードと私が得るコンパイラエラーがあります:
MyTrie<T>
は、任意の型を含むことができるテンプレート化されたトライです。Trie<int>::iter
非定数イテレータと定数イテレータがありますTrie<int>::const_iter
。Trie クラスで宣言 (および定義) されますiter begin()
。const_iter begin() const
Trie<int> t;
Trie<int>::const_iter it;
it = t.begin();
エラー :
../test/trie.cpp:181: error: no match for 'operator=' in 'it = Trie<T>::begin() [with T = int]()'
[..path..]/Trie.h:230: note: candidates are: Trie<int>::const_trie_iterator& Trie<int>::const_trie_iterator::operator=(const Trie<int>::const_trie_iterator&)
したがって、の非 const バージョンbegin
は使用されていないと思います。
operator=(const Trie<T>::const_trie_iterator&)
非定数イテレータのメソッドを作成することを考えましたが、 STD
lib にそれが表示されず、イテレータを const_cast する必要があります。私は何をすべきか?