gpt4 book ai didi

c++ - 在 C++14 中手动实现结构化绑定(bind)

转载 作者:行者123 更新时间:2023-12-01 14:13:15 24 4
gpt4 key购买 nike

是否可以使用 C++14 实现 C++17 结构化绑定(bind)?
我的目标是使用以下语法进行简单的概念证明:

int a,b;
(a,b)=std::tuple<int,int>(4,2);

我想象的方式是:

template <typename T, typename U>
operator=(operator()(T a, U b), std::tuple<T,U>(x,y))

所以 =左侧接收一个“绑定(bind)元组”并将右侧分配给它。

这甚至可能吗? - 它可以用 C++14 实现,还是需要在后台进行词法分析/解析才能启用它?

编辑 不使用 std::tie 是否可行? ,但使用 (a,b) 语法?

最佳答案

当然。这甚至已经作为 std::tie() 存在于标准库中。 :

std::tie(a, b) = std::make_tuple(4, 2);

请注意,这只适用于右侧的元组。您可以相当直接地将其扩展为适用于原始数组。但是让它为聚合工作要困难得多 - 如果没有额外的语言支持,您将需要 magic_get为了那个原因。

如果你真的想要:
(a, b) = std::make_tuple(4, 2);

工作,那么这样做的唯一方法基本上是通过添加全局 operator,() 来丢弃你拥有的所有其余代码。 std::tie()为你:
template <typename T, typename U>
auto operator,(T& t, U& u) { return std::tie(t, u); }

template <typename... T, typename U>
auto operator,(std::tuple<T&...> t, U& u) { return std::tuple_cat(t, std::tie(u)); }

以便:
(a, b) = std::make_tuple(4, 2);

本身转变为:
std::tie(a, b) = std::make_tuple(4, 2);

但就像......不要那样做。

关于c++ - 在 C++14 中手动实现结构化绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62155040/

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