How to provide multiple begin/end proxies for a class
问题 Given the classes struct Data { void bar() const; void baz(); } class Foo { std::vector<Data> data; std::map<size_t, Data> indexed_data; } I'd like to implement something in class Foo so that I can do the following: 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 } However, I don't wanna expose the class