cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
90 stars 0 forks source link

Structured bindings syntax extensions #447

Open kirillgrachoff opened 3 years ago

kirillgrachoff commented 3 years ago

Что это такое сейчас

Пусть есть код:

auto value = make_tuple(10, 'a', std::string("YourName"));
В стандарте C++17 стало возможным писать такой код:
```cpp
auto [a, b, c] = value
auto& [x, y, z] = value;

Идея No 1

Но (да, такое бывает) может быть такое, что хочется сделать что-то такое, но не заводить новые переменные. Т.е. что-то такое:

auto [a, b, c] = value;
if (conditional_function(a)) {
    [a, b, c] = value2;
}

Но такое невозможно сделать сейчас.

Предложение

Ввести дополнительный синтаксис

typeA a;
typeB b;
typeC c;
// some code...
[a, b, c] = value;

Т.е. хотелось бы сделать возможным structured bindings в присваивании.

Идея No 2

Вот есть то, что есть выше и в стандарте 17 года. Хотелось бы иметь возможность и заводить переменные этой инструкцией, и инициализировать уже существующие.

Предложение

Можно писать типы в инструкции из идеи 1.

Хотелось бы сделать валидным такую вещь:

[a, b, std::string& name] = value;
[int x, b, c] = value;

Т.е. появилось 2 новых переменных: int x и std::string& name.

[int& x, char y, const std::string& z] = value;