Не совсем. Структурированные привязки могут только объявлять новые имена, но не могут присваивать существующим.
Лучше всего просто сделать это:
foo() : foo(IO()) { } // delegate to a constructor, calling IO
foo(std::tuple<A, vector<A>>&& tup) // manually unpack within this constructor
: var(std::get<0>(std::move(tup)))
, vec(std::get<1>(std::move(tup)))
{ }
<ч />
Если A
оказывается конструируемым по умолчанию и назначаемым для перемещения, то да, это тоже работает:
foo() {
std::tie(var, vec) = IO();
}
Если A
случится с , а не , может быть конструируемым по умолчанию, тогда вы можете использовать optional
, чтобы добавить это дополнительное состояние:
struct foo {
std::optional<A> var;
std::vector<A> vec;
foo() {
std::tie(var, vec) = IO();
}
};
Ни один из них не особенно хорош.