我會創建專門的函數來將數組轉換爲元組。 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