Представим, что вам нужно вызвать следующий метод:
std::tuple<int, int, int> foo();
В C ++ 17 вы можете вызвать функцию и распаковать кортеж в одну строку:
auto [a, b, c] = foo();
Теперь, как мне перейти к сохранению только b
и c
и сбросу a
?
В настоящее время мне известны только два варианта:
1 - я могу использовать фиктивную переменную при автоматической распаковке
Тем не менее, фиктивная переменная не будет использоваться, и она выдаст предупреждение, поэтому, если я захочу замолчать это предупреждение, код будет довольно неприятно видеть:
#pragma warning(push)
#pragma warning(disable:4101)
// ReSharper disable once CppDeclaratorNeverUsed
auto [_, b, c] = foo();
#pragma warning(pop)
2 - я могу сохранить весь кортеж и использовать std::get
, чтобы получить ссылку на единственные переменные, которые мне нужны. Код менее неприятен, но синтаксис также менее прост.
Более того, размер этого кода увеличивается на одну строку для каждого нового значения, которое мы хотим сохранить в кортеже.
auto tuple = foo();
int b = std::get<1>(tuple);
int c = std::get<2>(tuple);
Есть ли другой и более простой способ распаковать только некоторые параметры в кортеже?