Trong khi suy nghĩ về giải pháp cho câu hỏi std::initializer list from already existing std::array without enumerating each element, tôi đã phát triển cơ chế tương tự như bolov đã làm, nhưng không xây dựng các đối tượng, nhưng danh sách initializer thay vì chỉ. Tôi đã rất ngạc nhiên khi giải pháp của tôi không hoạt động và tôi không thể hiểu tại sao.Xây dựng initializer_list bằng cách liệt kê các giá trị chứa các giá trị ngẫu nhiên
#include <initializer_list>
#include <iostream>
#include <array>
template<typename T, std::size_t N, std::size_t... Is>
std::initializer_list<T> array_to_init_list_helper(std::array<T, N> arr, std::index_sequence<Is...>)
{
return {arr[Is]...};
}
template<typename T, std::size_t N>
std::initializer_list<T> array_to_init_list(std::array<T, N> arr)
{
return array_to_init_list_helper(arr, std::make_index_sequence<N>{});
}
int main()
{
std::array<int, 5> arr{1, 2, 3, 4, 5};
auto init_list = array_to_init_list(arr);
for (auto val : init_list)
std::cout << val << " ";
}
Tôi getting random values, trong khi tôi mong chờ để có được giá trị của arr
.
['std :: initializer_list'] (http://en.cppreference.com/w/cpp/utility/initializer_list) không phải là vùng chứa - về cơ bản chỉ là một cặp con trỏ. Trong thực tế, 'array_to_init_list_helper' trả về con trỏ tới các biến cục bộ. Từ bài viết: "Sao chép một' std :: initializer_list' không sao chép các đối tượng cơ bản. " –