Pertanyaan saya: Apakah kami dapat membuat wadah perpustakaan standar (yang ada) dengan jangkauan apa pun? Dan yang lebih penting, dengan berbagai tampilan?
Tidak. Satu-satunya komponen perpustakaan standar yang dapat dibangun dari rentang arbitrer yang memenuhi kriteria yang benar adalah std::span<T>
.
Arah pustaka standar kemungkinan akan mengarah ke rentang-v3 juga menuju (perhatikan bahwa contoh terkait dari rentang-v3 mengkompilasi tetapi memperingatkan tentang konversi yang ditinggalkan) - menggunakan penolong untuk melakukan konversi untuk Anda:
std::vector<int> squares =
std::ranges::views::transform(vec, sq) | std::ranges::to<std::vector>;
Salah satu alasan untuk tidak menggunakan arahan konstruktor dapat dilihat dari contoh yang Anda gunakan:
std::vector<int> squares { std::ranges::views::transform(vec, sq) };
Pertimbangkan betapa berbedanya deklarasi itu dari keduanya:
std::vector v { std::ranges::views::transform(vec, sq) };
std::vector w ( std::ranges::views::transform(vec, sq) );
v
tentu akan menjadi yang vector<transform_view<...>>
mengandung tunggal transform_view
, sementara w
akan menjadi vector<int>
.
Selain itu, menambahkan lebih banyak, konstruktor kontainer yang dibatasi dengan hati-hati ke perpustakaan standar tidak akan membantu jenis kontainer pihak ketiga - sementara fasilitas seperti ranges::to
berfungsi dengan sangat baik dalam semua kasus.