私はいくつかのテンプレートプログラミングで歯を食いしばっています、そして私はこれに非常に新しいです。実装したいのは、STLコンテナを含むいくつかのCRTPクラスです。CRTPスタイルに従ってコンパイル時にとが「派生」する(コンパイル時の)基本クラスのclass A{};
例として使用してみましょう。class B{};
class C{};
これで、との両方B
にC
コンテナが含まれます。例の目的のために、それをそれぞれastd::vector
とaとしstd::set
ます。begin()
ここで、これらのイテレータをaとend()
、フォワードイテレータを公開する関数を介して公開したいと思います。ただし、内部にある正確なコンテナを公開したくないのでB
、C
これらの関数をに定義しA
て、呼び出し時に正しいものをB
使用できるようにしC
ます。
これは可能ですか?今のところ、私の計画は、のIterator
内部クラスを持ち、B
それにC
実際のイテレータ(場合によってはベクトルまたはセット)を含み、それに呼び出しを委任することです。ただし、これは複製されたグルーコードが多いようで、より良いオプションがあると思います。
いくつか質問があります。
A
で内側の留め金を宣言して、 CRTPB
でうまく機能するようにするにはどうすればよいですかC
。A
、、のためにそれを複製する必要がB
ありC
ますか?で空のクラスにすることはできますか?また、特殊な実装でA
それらをマスクしますか?B
C
接着剤と重複を減らしてイテレータを公開するにはどうすればよいですか?
boostのような外部ライブラリとの依存関係を作成したくないので、stdのみに固執したいと思います。ですから、自分で必要なものは何でも実装する必要があります。すべての助けをありがとう。