【发布时间】:2019-11-30 20:00:24
【问题描述】:
给定类
struct Data
{
void bar() const;
void baz();
}
class Foo
{
std::vector<Data> data;
std::map<size_t, Data> indexed_data;
}
我想在 Foo 类中实现一些东西,以便我可以执行以下操作:
int main()
{
Foo foo;
for(const auto& data : foo.data())
data.bar();
for(auto& data : foo.indexed_data())
data.baz();
const auto& foo_ref = foo;
for(auto& data : foo_ref.data())
data.baz(); // constness violated, shouldn't compile
}
但是,我不想仅仅通过返回对容器的引用来公开类内部。我也可以使用我想要迭代的范围没有作为容器实现的类。所以我基本上想创建某种代理对象,它比开始/结束对的包装器多一点,这样我就可以在我的类中迭代多个东西。 此外,我希望它是正确的,如上所示。是否有任何众所周知的模式来实现这一点?
【问题讨论】:
-
相关/欺骗代理的外观:stackoverflow.com/questions/8164567/…
标签: c++ iterator range c++14 const-correctness