したがって、基本的に私がやりたいことは、たとえば疑似コードで、具象型の任意のコレクションにイテレータを返す純粋仮想メソッドを用意することです。
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はデモ用であり、実際には具象型です。