次の定型文クラスの断片を考慮してください。
class ObjectA : public BaseObject
{
DerivedMemberA a, a2, a3;
DerivedMemberB b;
DerivedMemberC c;
// ...
};
DerivedMember*
タイプは共通のクラスから派生し、(BaseMember
およびObjectA
同様ObjectB
の、ObjectC
...)はから派生しBaseObject
ます。
BaseObject
ここで、パブリックインターフェイスにあり、派生クラスのメンバーへの参照を反復処理するイテレータを実装したいと思います(as BaseMember&
)。
言い換えれば、使用法は次のようになります。
BaseObject& b = someObject;
for (BaseObject::iterator it = b.begin(); it != b.end(); ++it)
{
BaseMember& m = *it;
// ...
}
呼び出されたのObjectA
は、繰り返しますa
、a2
..。
これを解決するための最良の方法は何ですか?できれば、イテレータのサブクラス化も避けてください。そこで再利用できる準備ができているイテレータクラスまたはテンプレートはありますか?
私は、変数の数値「インデックス」を取りswitch
、適切な参照を返すためにaを使用する仮想メンバー関数を実装することを考えていました。次に、インデックス保持イテレータからそのメンバーを呼び出します。