> On Sept. 22, 2014, 7:19 p.m., Ben Mahler wrote: > > docs/mesos-c++-style-guide.md, lines 96-99 > > <https://reviews.apache.org/r/25622/diff/3/?file=699636#file699636line96> > > > > Why would the iterator be called `containerizer`? > > > > s/containerizer/iterator/ ? > > Dominic Hamon wrote: > -1 > > naming a variable after a type is never a good idea. in this case, you're > getting a containerizer (iterator) from the container of containerizers so > the name 'containerizer' makes sense. > > Ben Mahler wrote: > Sounds confusing. > > Ben Mahler wrote: > If 'auto' was not used here, would we call this 'containerizer'? In a > loop, this would typically be called `iterator`, no? > > ``` > for (auto iterator = containerizers.begin(); iterator != > containerizers.end(); ++iterator) { > Containerizer* containerizer = *iterator; > } > ``` > > Why do something differently when auto is used? > > If the iterator was being "de-referenced" then `containerizer` makes > sense: > > ``` > Containerizer* containerizer = *(containerizers.begin()); > ``` > > Alexander Rukletsov wrote: > I agree with Dominic: it's more important what is stored in the container > and not how we access it (iterator, reference, etc.). Actually, the example > is taken from our code base, see `src/slave/containerizer/composing.cpp:394`
Ok, since this example uses `containerizer` as a reference to the `Containerizer*`, as opposed to an iterator, your points make sense. But in general I don't think this is a pattern we'll want in our code because of the masquerading types now hidden with 'auto'. Iterators are not as simple as a pointer or reference. What I find unfortunate is that we wouldn't apply the same naming scheme as soon as we change the container type, which affects the iterator type: ``` map<string, Containerizer*> containerizers; auto containerizer = containerizers.begin(); // Wouldn't do this. ``` How about a different example here with .find() as opposed to .begin()? Take a look at cache.hpp as an example: ``` // Evict the least-recently used element from the cache. void evict() { const typename map::iterator& i = values.find(keys.front()); CHECK(i != values.end()); values.erase(i); keys.pop_front(); } ``` Here we definitely care about the iterator, as opposed to the value, and would name 'i' accordingly. - Ben ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/25622/#review54173 ----------------------------------------------------------- On Sept. 22, 2014, 1:10 p.m., Alexander Rukletsov wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/25622/ > ----------------------------------------------------------- > > (Updated Sept. 22, 2014, 1:10 p.m.) > > > Review request for mesos, Benjamin Hindman, Ben Mahler, Dominic Hamon, and > Till Toenshoff. > > > Bugs: MESOS-1793 > https://issues.apache.org/jira/browse/MESOS-1793 > > > Repository: mesos-git > > > Description > ------- > > Explicitly prohibit the use of namespace aliases. The discussion about using > namespace aliases took place in [the other > review](https://reviews.apache.org/r/25434/#comment91754). The majority > agreed not to introduce them in code. > > Give examples of preferable way of using auto. > > > Diffs > ----- > > docs/mesos-c++-style-guide.md 59a39df > > Diff: https://reviews.apache.org/r/25622/diff/ > > > Testing > ------- > > Documentation change, no `make check` needed. > > > Thanks, > > Alexander Rukletsov > >