gpt4 book ai didi

c++ - 成员变量的结构化绑定(bind)

转载 作者:行者123 更新时间:2023-11-30 03:22:41 24 4
gpt4 key购买 nike

在visual studio 2017中,开启/std:c++17后,我可以做

auto [d1, d2] = func_return_tuple();

,其中 func_return_tuple() 返回两个 double 值的元组。

但是,如果类A有两个成员变量d1_d2_,我做不到

A a;
auto [a.d1_, a.d2_] = func_return_tuple();

有出路吗?

当然,

std::tie(a.d1_, a.d2_) = func_return_tuple();

始终有效。

最佳答案

Is there a way out?

基本上,没有。结构化绑定(bind)只是将对象分解为组成元素。它总是引入 n 个新名称 - 每个元素一个。您不能通过结构化绑定(bind)进行分配,也不能使用它来重新绑定(bind)现有名称或类似的东西。

你的选择基本上是:

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());

关于c++ - 成员变量的结构化绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50962301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com