gpt4 book ai didi

c++ - 在 C++ 中解包嵌套元组

转载 作者:可可西里 更新时间:2023-11-01 18:37:38 26 4
gpt4 key购买 nike

std::tie 提供了一种将 C++ 中的元组内容解压缩到单独定义的变量中的便捷方法,如下面的示例所示

int a, b, c, d, e, f;

auto tup1 = std::make_tuple(1, 2, 3);
std::tie(a, b, c) = tup1;

但是,如果我们有一个像下面这样的嵌套元组

auto tup2 = std::make_tuple(1, 2, 3, std::make_tuple(4, 5, 6));

正在尝试编译代码

std::tie(a, b, c, std::tie(d, e, f)) = tup2;

因错误而失败

/tmp/tuple.cpp:10: error: invalid initialization of non-const reference of type ‘std::tuple<int&, int&, int&>&’ from an rvalue of type ‘std::tuple<int&, int&, int&>’
std::tie(a, b, c, std::tie(d, e, f)) = tup2;
^

在 C++ 中是否有一种惯用的方法来解包元组的元组?

最佳答案

当您知道没有风险时,您可以通过以下辅助函数将右值引用转换为左值引用:

template <class T>
constexpr T &lvalue(T &&v) {
return v;
}

然后你就可以这样使用它了:

std::tie(a, b, c, lvalue(std::tie(d, e, f))) = tup2;

在您的情况下,这样做确实没有问题,因为内部元组只需要在语句的持续时间内保持事件状态,并且(确实)是这种情况。

关于c++ - 在 C++ 中解包嵌套元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33597474/

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