배열을 튜플로 변환하는 전용 함수를 만듭니다. 로 볼 수있는 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>{});
}
그리고이 좋아 사용 : integer_sequence
을 구현하지만 필요 ++ (11) C에서
std::array<int, 3> arr = {{1, 2, 3}};
int a, b, c;
std::tie(a, b, c) = unpack(arr);
가 나오지 않는 한 상자에 표준 ...
Here 당신은 완전한 C++ 11 해결책을 찾을 수 있습니다.
편집 :
배열 불필요한 복사를 방지 할 수있는 몇 가지 더 복잡한 개체를 포함합니다.
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에도에 컴파일 const와 당신이 수까지 간단한 넥타이 배열 요소가 당신을 귀찮게하지 않는 경우 대신 make_tuple
당신이 또는 const를 참조 튜플을 사용할 수 있음을 수행하려면
아마도'libC++'구현에 의해 추가로 제공되는 것일까 요? – Arunmu
[Visual Studio 2015에서 컴파일되지 않음] (0120-13755) – PaulMcKenzie
3.2 이상의 버전의 clang에서는 컴파일되지 않습니다. [링크는 명령 행 옵션을 잃어 버리는 것처럼 보이기 때문에'-std = C++ 11'을 추가하십시오.] – PaulMcKenzie