我会创建专门的函数来将数组转换为元组。 C++ 14的代码可能如下所示:
template <class T, std::size_t N, std::size_t... Is>
auto unpack_impl(std::array<T, N> &arr, index_sequence<Is...>) -> decltype(std::make_tuple(arr[Is]...)) {
return std::make_tuple(arr[Is]...);
}
template <class T, std::size_t N>
auto unpack(std::array<T, N> &arr) -> decltype(unpack_impl(arr, make_index_sequence<N>{})) {
return unpack_impl(arr, make_index_sequence<N>{});
}
,然后用它喜欢:
std::array<int, 3> arr = {{1, 2, 3}};
int a, b, c;
std::tie(a, b, c) = unpack(arr);
在C++ 11你不过需要实现integer_sequence
,因为它不来的了在标准框中...
Here你可以找到完整的C++ 11解决方案。
编辑:
如果数组包含你可能希望避免不必要的复制一些更复杂的对象。要做到这一点,而不是make_tuple
你可以使用常量引用的元组或者常量性不打扰你你可以简单的领带数组元素了:
template <class T, std::size_t N, std::size_t... Is>
auto unpack_impl(std::array<T, N> &arr, index_sequence<Is...>) -> decltype(std::tie(arr[Is]...)) {
return std::tie(arr[Is]...);
}
EDIT2:
This one还汇编了VS
大概是由'libC++'实现提供的东西吗? – Arunmu
[不能在Visual Studio 2015中编译](http://rextester.com/BXYD49474) – PaulMcKenzie
这不会在3.2以后的版本中编译。 [见这里](https://godbolt.org/g/IJzo2c)(加入'-std = C++ 11',因为链接似乎失去了命令行选项) – PaulMcKenzie