如何从一个值元组中生成一个左值元组引用
How to make a tuple of lvalue references from a tuple of values
有一些问题与此主题有关:
如何制作一个常量引用元组?
std::make_tuple没有';t参考
但两人都没有讨论如何使来自的左值引用的元组成为值的元组。
这是我得到的:
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)...);
}
相关文章:
- 在boost::hana中给定一个键元组,如何从映射中获取值元组
- 从 c++ 中的字符串向量创建一个元组
- 用一个额外的元素扩展 std::array 的每个 std::元组
- 使用对另一个元组不同类型的元素的非常量引用来初始化元组的元素
- 您可以static_assert一个元组只有一种满足特定条件的类型
- 使用参数包和元组创建一个简单的表达式类
- 如何将多个可变参数模板元组类组合成一个类?
- 我如何打印一个元组矢量
- 初始化boost :: hana ::元组用一个参数
- 如何创建一个 std::tuple,其中包含由索引元组指定的向量中的成员
- c++存储映射元组的引用,以便在另一个函数中使用
- 接受元组并返回另一个元组的功能
- 做一个CPP分类的元组
- 将参数一个接一个地传递,或通过将它们包裹在数组,结构或元组中
- 创建一个伪元组,一个存储在其他地方的数据的前端
- 如何在运行时创建一个由N个整数组成的元组
- 在另一个 std::元组中创建 std::"contained" 类型的元组
- 将一个std::数组拆分为一个较小大小的std::array元组
- 填充一个boost元组以替代此方法
- 元组的一个元素可以引用另一个元素吗