C++:返回一个基于范围 for 循环迭代器,其中包含继承对象

C++ : Return an range based for loop iterator with inheritate objects

本文关键字:迭代器 循环 对象 继承 包含 for 返回 一个 C++ 于范围 范围      更新时间:2023-10-16

我有一个类Vertex,我想以特定的方式迭代它的邻居,例如:

Vertex my_v;
for(const Vertex& v : my_v.get_neighbors_closer_than(10.0)
/* Some code on v*/
// And like this
for(const Vertex& v : my_v.get_neighbors_by_trigonometric_order()
/* Some code on v*/

为此,我创建了自定义容器和迭代器,它们以我想要的方式进行迭代。然后,我需要创建一个继承DlnVertex : public Vertex该类大多数时候对迭代函数具有相同的行为。因此,我想在我的DlnVertex课上写:

DlnVertex my_dv;
for(const DlnVertex& dv : my_dv.get_neighbors_closer_than(10.0))
/* Some code on dv*/
for(const DlnVertex& dv : get_neighbors_by_trigonometric_order())
/* Some code on dv*/

我的自定义迭代器返回一个Vertex&,我需要在我的类DlnVertex中使用DlnVertex属性,并且我不知道如何避免为我的继承类重写迭代器,因为它将具有相同的行为。是否有任何建议模式代码示例可以帮助我?

我找到了一种方法:为函数的返回类型模板我的基类:

template<typename VertexType>
class Vertex
{
/* ... */
MyContainer<VertexType> get_neighbors_closer_than(double rad);
}

然后通过将自身设置为模板类型来设计我的派生类:

class DlnVertex : public Vertex<DlnVertex>{/* ... */}