2
A
回答
3
映射一个元组很容易给出a pack of indices,如:
#include <tuple>
#include <functional>
#include <iostream>
template <int...>
struct Seq {};
template <int n, int... s>
struct Gens : Gens<n-1, n-1, s...> {};
template <int... s>
struct Gens<0, s...> {
typedef Seq<s...> Type;
};
// The above are taken from https://stackoverflow.com/q/7858817
使用指标,我们可以使用std::get
适用std::ref
的元组的每一个元素:
template <int... s, typename Tuple>
auto ref_tuple_impl(Seq<s...> seq, Tuple& tup)
-> std::tuple<
std::reference_wrapper<
typename std::tuple_element<s, Tuple>::type
>...
>
{
return std::make_tuple(std::ref(std::get<s>(tup))...);
}
template <typename Tuple>
auto ref_tuple(Tuple& tup)
-> decltype(ref_tuple_impl(typename Gens<std::tuple_size<Tuple>::value>::Type>(), tup))
{
return ref_tuple_impl(typename Gens<std::tuple_size<tuple>::value>::Type(), tup);
}
用法示范:
int main() {
auto t = std::make_tuple(1, 4.5, "66");
auto rt = ref_tuple(t);
std::get<0>(rt).get() = 123;
std::get<1>(rt).get() = 5.67;
std::get<2>(rt).get() = "34";
std::cout << std::get<0>(t) << std::endl;
std::cout << std::get<1>(t) << std::endl;
std::cout << std::get<2>(t) << std::endl;
}
相关问题
- 1. 如何获取元组元组中的最大元素?
- 2. 从元组元组中获取值
- 3. 如何从数组中获取元素。
- 4. 获取列表中的元组元素
- 5. 如何从SML中的元组列表中获取元素?
- 6. (Swift)如何从元组数组[[Date,MyClass]]中获取元组元素(Date,MyClass)的索引?
- 7. 引用元组列表中的元素
- 8. 从元组元组中区分元组
- 9. 如何从Python中的元组获取第二个元素?
- 10. C++ 11。如何从没有const的元组中获取元素
- 11. HIVE,如何从数组中获取元素,元素本身也是数组
- 12. 如何从元组中创建元组?
- 13. 如何从一个可变元组中获取元素?
- 14. Boost.Range的C++元组 - 获取元素类型的元组?
- 15. 组合元组列表中的元组元素。元组元素是元组和列表
- 16. 获取组成元素引用的html?
- 17. 获取一个元组的第一个元素,在元组
- 18. 如何过滤元组元组中的第二个元素?
- 19. 如何访问元组中的元素?
- 20. 如何交换元组中的元素?
- 21. 从数组中获取元素?
- 22. 从数组中获取某些元素
- 23. 从事件中获取元素数组
- 24. 从数组中获取单个元素
- 25. 从F#中的元组集合中获取元素
- 26. 从Python中的元组中减去元组的元组?
- 27. 如何在元组列表中索引元组的最后一个元素
- 28. jQuery - 从数组中获取元素作为jQuery元素?
- 29. 使用Javascript/jQuery的从元素位/索引获取的数组元素索引
- 30. 如何获得一个元组元素
进行了一项更改,以便'ref_tuple'还可以与'std :: tuple const'一起使用。 –