我试图解压缩一个元组并使用结果分配给成员。在惯用的C ++ 17中可以做到这一点吗?
我意识到std :: tie存在,但我正在尝试利用C ++ 17的功能……
并不是的。结构化绑定只能 宣布 新名称,它不能 分配 现有的。
最好是这样做:
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 碰巧是默认的可构造并且可移动可分配,那么是的,这也适用:
A
foo() { std::tie(var, vec) = IO(); }
如果 A 碰巧 不 默认可构造,然后你可以使用 optional 添加额外状态:
optional
struct foo { std::optional<A> var; std::vector<A> vec; foo() { std::tie(var, vec) = IO(); } };
这些都不是特别好。