gpt4 book ai didi

c++ - 使用标准库在 C++11 中使用 std::tie 提取嵌套在元组中的元组

转载 作者:行者123 更新时间:2023-11-28 04:09:23 28 4
gpt4 key购买 nike

有一个函数的返回类型是 std::tuple, bool>。我想使用 std::tie 将值直接提取到 num1、num2 和 bool_val。请注意,我想直接使用 std 库。我有帮助程序代码来解压它(如果 c++11 std lib 已经允许这样做的话,最好避免使用它。)

是否可以使用标准库 (cpp11) 仅使用 std::tie 提取值,如下所示?语法错误吗?我试图理解为什么它不起作用。

#include <iostream>
#include <tuple>

using PosType = std::tuple<int, int>;
std::tuple<std::tuple<int, int>, bool> SomeFunc() {
return std::make_tuple(std::make_tuple(10, 12), true);
}

int main() {
int n1 = -1, n2 = -1;
bool b = false;
PosType temp;

// This line gives compilation error. Trying to understand why this might be wrong.
// std::tie(std::tie(n1, n2), b) = SomeFunc();

std::cout << n1 << " " << n2 << " " << b << " " << std::endl;
return 0;

}

有人可以为我解释一下 cppreference 中的这段代码吗?这是 std::tie 的可能实现( https://en.cppreference.com/w/cpp/utility/tuple/tie )

template <typename... Args>
auto tie(Args&... args) {
return std::tuple<Args&...>(args...);
}

最佳答案

从根本上说,std::tie()根据传递给它的引用创建一个引用元组。您遇到的问题是引用无法绑定(bind)到临时对象。你的std::tie(n1, n2)返回临时 std::tuple<int&, int&>并且不能绑定(bind)到 std::tuple<int&, int&>&作为下一个std::tie()的参数.

要完成这项工作,您必须制作中间件 std::tuple<int&, int&>让它绑定(bind)到:

std::tuple<int&, int&> nested = std::tie(n1, n2);
std::tie(nested, b) = SomeFunc();

关于c++ - 使用标准库在 C++11 中使用 std::tie 提取嵌套在元组中的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58142718/

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