gpt4 book ai didi

c++ - 如何用元组转发unique_ptr?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:07 26 4
gpt4 key购买 nike

想象一个函数期望对 std::unique_ptr 的右值引用。

void foo(std::unique_ptr<int>&& a);

在我的真实示例中,有不止一个参数,因此我决定使用 std::tuple<T&&> 将参数转发给它右值引用 - 所以 std::forward_as_tuple :

void forward_to_foo(std::tuple<std::unique_ptr<int>&&>&& t);
int main() {
forward_to_foo(std::forward_as_tuple(std::make_unique<int>(8)));
}

目前一切正常

当我想“解压”这个元组时出现问题

void forward_to_foo(std::tuple<std::unique_ptr<int>&&>&& t)
{
foo(std::get<0>(t));
}

我在使用 c++14 的 gcc4.9 上遇到了这个错误:

error: cannot bind 'std::unique_ptr<int>' lvalue to 'std::unique_ptr<int>&&'
foo(std::get<0>(t));

我的问题:这里的问题是什么?为什么 std::get<I>(t)从右值引用的元组返回左值?

最佳答案

what is the problem here?

你需要std::movelvalue 表达式移动:

foo(std::move(std::get<0>(t)));

Why std::get<I>(t) from tuple of rvalue references returns lvalue?

因为它返回对元组元素的左值 引用。通常,返回左值 引用的函数的结果是左值,因为它表示现有对象而不是临时对象。

关于c++ - 如何用元组转发unique_ptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29081236/

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