2011-02-03 3 views
0

私はbegin()とend()を持つオブジェクトの継承構造を基本クラスの純粋な仮想メンバ関数として持っています。このオブジェクトから、私は複合構造を構築するつもりです。この内部オブジェクトはstd :: vectorメンバーbegin()とend()からデータを取得します。しかし、リーフクラスにはベクトルがありません。今、リーフクラスでbegin()とend()の戻り値を見つけようとしています。それをする良い方法は何でしょうか?コンテナがない場合のイテレータとして返すものは?

最も簡単な方法は、begin()とend()を起動する要素を持たないリーフクラスのベクターメンバーを持つことですが、これはちょうど良い気分にはなりません。

+0

なぜそれは正しく感じませんか?それは私にはかなり直感的です。 –

+4

派生クラスのすべてが有意義に関数を実装できるわけではない場合、そのクラスは基本クラスの関数ですか?私には、悪いデザインの製品のように聞こえる。 – GManNickG

+0

仮想基底クラスの '' begin'と 'end'の実装が見えることはありますか? –

答えて

1

ダミーイテレータを単純に返すリーフクラス内に非常に単純なイテレータクラスを実装できます。例えば。 begin()はend()が返すものと同じイテレータを返します。いくつかの比較関数も実装する必要があります。私はstd :: iteratorがこれをどのように処理するのかはよく分かりませんが、必要なものがいくつかあります。

+0

'begin()'と 'end()'が仮想オーバーライドの場合は、特定の型を返す必要があります。ダミークラスを使用してもここでは役に立ちません。 – aschepler

+0

これを調べてみましょう。カスタムイテレータはこれを行う良い方法のようです。ありがとう – DaClown

関連する問題