在Visual Studio 2017中,打开/std:c++17
后,我可以完成
auto [d1, d2] = func_return_tuple();
,其中func_return_tuple()
返回两个双精度值的元组。
但是,如果类A有两个成员变量d1_
和d2_
,我就不能这样做
A a;
auto [a.d1_, a.d2_] = func_return_tuple();
有没有出路?
当然
std::tie(a.d1_, a.d2_) = func_return_tuple();
始终有效。
答案 0 :(得分:2)
有没有出路?
基本上没有。结构化绑定仅与将对象分解为组成元素有关。它总是引入 n 个新名称-每个元素一个。您不能通过结构化绑定进行分配,也不能使用它来重新绑定现有名称或类似名称。
您的选择基本上是:
std::tie(a.d1_, a.d2_) = func_return_tuple();
或者,假设A
是包含这两个成员的聚合,则类似:
template <typename T>
struct list_init_t {
template <typename... Args>
T operator()(Args&&... args) const {
return T{std::forward<Args>(args)...};
}
};
template <typename T>
inline constexpr list_init_t<T> list_init;
用作:
a = std::apply(list_init<A>, func_return_tuple());