gpt4 book ai didi

c++ - 如何从值元组创建左值引用元组

转载 作者:太空狗 更新时间:2023-10-29 21:42:35 33 4
gpt4 key购买 nike

有一些与此主题相关的问题:

How to make a tuple of const references?

std::make_tuple doesn't make references

但两者都没有讨论如何从值元组创建左值引用元组。

这是我得到的:

template <typename... Args>
std::tuple<Args&...> MakeTupleRef(const std::tuple<Args...>& tuple)
{
return std::tie(tuple); // this fails because std::tie expects a list of arguments, not a tuple.
}

int main()
{
std::tuple<int, int> tup;
std::tuple<int&, int&> tup2 = MakeTupleRef(tup); // the values of tup2 should refer to those in tup
return 0;
}

据我所知,std::tie 在这里是理想的,因为它产生左值引用,但它不接受元组作为输入。我怎样才能解决这个问题?

最佳答案

通常的 integer_sequence 技巧:

template <typename... Args, std::size_t... Is>
std::tuple<Args&...> MakeTupleRef(std::tuple<Args...>& tuple, std::index_sequence<Is...>)
{
return std::tie(std::get<Is>(tuple)...);
}


template <typename... Args>
std::tuple<Args&...> MakeTupleRef(std::tuple<Args...>& tuple)
{
return MakeTupleRef(tuple, std::make_index_sequence<sizeof...(Args)>());
}

如果已知元组中的类型是唯一的,则有一个更简单的替代方法:

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

关于c++ - 如何从值元组创建左值引用元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25754612/

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