Meine Frage: Werden wir in der Lage sein, (vorhandene) Standardbibliothekscontainer mit einem beliebigen Bereich zu erstellen? Und was noch wichtiger ist, mit Entfernungsansichten?
Nein. Die einzige Standardbibliothekskomponente, die aus einem beliebigen Bereich konstruierbar ist, der die richtigen Kriterien erfüllt, ist std::span<T>
.
Die Richtung, in die die Standardbibliothek wahrscheinlich gehen wird, ist die Richtung, in die sich range-v3 ebenfalls bewegt (beachten Sie, dass das verknüpfte Beispiel aus range-v3 zwar kompiliert wird, aber vor einer veralteten Konvertierung warnt) - Verwenden eines Hilfsprogramms , um Konvertierungen für Sie durchzuführen:
std::vector<int> squares =
std::ranges::views::transform(vec, sq) | std::ranges::to<std::vector>;
Einer der Gründe, nicht in die Richtung von Bereichskonstruktoren zu gehen, ist aus dem Beispiel ersichtlich, das Sie verwenden:
std::vector<int> squares { std::ranges::views::transform(vec, sq) };
Überlegen Sie, wie unterschiedlich diese Erklärung von diesen beiden ist:
std::vector v { std::ranges::views::transform(vec, sq) };
std::vector w ( std::ranges::views::transform(vec, sq) );
v
wäre notwendigerweise eine, vector<transform_view<...>>
die eine Single enthält transform_view
, während w
eine vector<int>
.
Darüber hinaus hilft das Hinzufügen weiterer, sorgfältig eingeschränkter Containerkonstruktoren zur Standardbibliothek ohnehin nicht den Containertypen von Drittanbietern - während eine Einrichtung wie diese ranges::to
in allen Fällen einwandfrei funktioniert.