请考虑以下样板类片段:
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
...
解决这个问题的最佳方法是什么?最好避免对迭代器进行子类化。是否有任何现成的迭代器类或模板可以在那里重用?
我正在考虑实现一个虚拟成员函数,该函数将采用变量的数字“索引”并使用 aswitch
返回适当的引用;然后从索引保持迭代器中调用该成员。