Le document P0122R (2016-02-12) du Library Evolution Working Group (LEWG)
renomme officiellement le type array_view
enspan
:
Changelog
Changements depuis R0
- Changement du nom du type proposé de
array_view
en span
suivant les commentaires du LEWG à la réunion de Kona.
- [...]
On peut également lire:
Impact sur la norme
Cette proposition est une pure extension de bibliothèque. Il ne nécessite aucune modification des classes, fonctions ou en-têtes standard. Il serait amélioré si cela pouvait dépendre du byte
type et des changements de comportement d'alias de type proposés dans P0257 .
Cependant, s'il est adopté, il peut être utile de surcharger certaines fonctions de bibliothèque standard pour ce nouveau type (un exemple serait copy()
).
span
a été implémenté en C ++ standard (C ++ 11) et est utilisé avec succès dans un outil commercial d'analyse statique pour le code C ++ ainsi que dans un logiciel de productivité de bureau commercial. Une implémentation de référence open source est disponible à l' adresse https://github.com/Microsoft/GSL .
Dans un chapitre suivant, ce document présente les accès en lecture seule et en lecture-écriture ( mutable ):
Types d'élément et conversions
span
doit être configuré avec son type d'élément via le paramètre template ValueType
, qui doit être un type d'objet complet qui n'est pas un type de classe abstraite.
span
prend en charge l'accès en lecture seule ou modifiable à la séquence qu'il encapsule. Pour accéder aux données en lecture seule, l'utilisateur peut déclarer a span<const T>
, et l'accès aux données mutables utiliserait un span<T>
.
[...]
Voir aussi le Guidelines Support Library Review:span<T>
de Marius Bancila (mars 2016) définissant span
comme:
La bibliothèque de prise en charge des lignes directrices est une implémentation Microsoft de certains des types et fonctions décrits dans les lignes directrices de base C ++
maintenues par la Standard C ++ Foundation . Parmi les types fournis par le GSL est span<T>
anciennement connu sous le nom de array_view<T>
.
span<T>
est une plage non propriétaire de mémoire contiguë dont l'utilisation est recommandée à la place des pointeurs (et compteur de taille) ou des conteneurs standard (tels que std::vector
ou std::array
).