c++ - 封装迭代器提供的对象

标签 c++

我有一个名为 Base 的类,它在内部包含一个类型为 SomeType 的对象容器。 然后我创建 class Derived: protected Base

现在我想在 Derived 类中创建自定义迭代器,以便为用户提供迭代 Base 类容器中对象的能力。问题是 SomeType 提供了更多我想提供的功能,即我想隐藏 SomeType 中提供的一些功能,并可能添加一些额外的数据字段和功能。


所以我尝试做的一件事是像这样包装 SomeType:

class AnotherType{
    private:
        SomeType& object;
    public:
    //Make visible what I want
}

然后在迭代器的 operator*() 中创建一个新的 AnotherType 对象并返回它。

我的问题是,我不能这样做:

Derived d;
for(auto& object: d)
    // Use object however i like.

注意 auto 中的“&”。

在我不添加任何额外数据字段的情况下,另一种可能的解决方案是使用类似 this 的方法。 .但正如我所见,这是未定义的行为。

有什么想法吗?

最佳答案

由于您希望迭代器返回引用,因此您需要有一个可以返回引用的非临时对象。最简单的方法是让迭代器类包含 AnotherType 的实例,并让 AnotherType 的成员成为 Base 的迭代器> 而不是引用,以便在修改 Derived 迭代器时可以更新它。

class AnotherType{
    private:
        Base::iterator iter;
    public:
        AnotherType(Base::iterator it) : iter(it) { }
    //Make visible what I want
        void Foo() { iter->Foo(); }
};

关于c++ - 封装迭代器提供的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40263487/

相关文章:

c++ - 如何在 Eclipse 中使用 nix

c++ - 在 C++ 中为结构体使用头文件、初始化文件和主文件

python - 在 C++ 中存储数据,就像在 python 中存储字典一样

c++ - DirectX 12 - 描述符堆

c++ - 在 win8 登录屏幕上运行应用程序

c++ - 为 Matrix 类设计迭代器

c++ - wglGetProcAddress 返回 NULL

c++ - 我需要打印静态矩阵重载 "<<"运算符

c++ - 获取用于使用 MS VS 2013 构建 Qt 的 qmake.exe

C++:在两个类中使用模板化 typedef