したがって、基本的に私がやりたいことは、たとえば疑似コードで、具象型の任意のコレクションにイテレータを返す純粋仮想メソッドを用意することです。
virtual Iterator<T> getIterator() const = 0;
このクラスのユーザーは、実際には、子クラスがどの実装を使用するかを気にしません。セット、ベクトル、リスト、配列などです。
私はstd::iterator
クラスを認識していますが、単純なベクトルを操作するために正しく指定する方法が見つかりません。
virtual std::iterator<std::random_access_iterator_tag,T> getIterator() const = 0;
myVector.begin() // compilation error in implementation
型パラメーターとして定義std::iterator
しても機能しませんでした。const T
また、そのままにしてT
、代わりにポインターと参照型をconst T*
andとして定義しようとしconst T&
ました。
std::vector
実装を見てみると、がstd::vector::const_iterator
実際に派生元から_Iterator012
派生していることがわかりました_Iterator_base
。
標準で任意のコレクションを操作する方法がないことは本当に私を悩ませています。のようにクラスをテンプレートとして実装すること<algorithm>
は、次の 2 つの理由から、私にとっては選択肢ではありません。
- 実際の値の型を制御できない
- クラス テンプレートを作成して設計を複雑にし、柔軟性を低下させたくないだけです。
使用された型パラメーターT
はデモ用であり、実際には具象型です。