[C++] C ++ 11 радиус и карта: читаемость


Answers

Не хорошая идея. Рано или поздно вам понадобится то же самое для std::tuple , и компилятор должен иметь возможность автоматически использовать std::get<> в tuple . На мой взгляд, ваш подход сейчас вам приятен, и вы найдете проблемы с этим подходом (предположим, что это реализовано именно так).

В стандартном комитете с глубоким учетом разработан цикл, основанный на диапазоне. Это лучше, чем цикл foreach на других языках, и это намного короче. Соедините его с auto& и все готово!

Question

На этот вопрос уже есть ответ:

Новые циклы, основанные на диапазонах, действительно улучшают читаемость и очень просты в использовании. Однако учтите следующее:

map<Foo,Bar> FooAndAssociatedBars;

for (auto& FooAndAssociatedBar : FooAndAssociatedBars) {
    FooAndAssociatedBar.first.doSth();
    FooAndAssociatedBar.second.doSomeOtherThing();
}

Это может быть деталь, но я считаю, что было бы более читаемым, если бы я мог сделать что-то вроде:

for ( (auto& foo, auto& bar) : FooAndAssociatedBars) {
    foo.doSth();
    bar.doSomeOtherThing();
}

Вы знаете эквивалентный синтаксис?

EDIT: Хорошие новости: на C ++ 17 есть предложение, которое ссылается на эту проблему, называемую структурированными привязками (см. 1 ). В C ++ 17 вы должны иметь возможность написать:

tuple<T1,T2,T3> f(/*...*/) {
    /*...*/ 
    return {a,b,c};
}
auto [x,y,z] = f(); // x has type T1, y has type T2, z has type T3

который решает эту проблему читаемости