La bibliothèque de support des directives (GSL) contient des fonctions et des types suggérés pour une utilisation par les directives de base C ++ maintenues par la Fondation C ++ standard. Ce repo contient l'implémentation de GSL par Microsoft.
L'implémentation entière est fournie en ligne dans les en-têtes dans le répertoire GSL. L'implémentation suppose généralement une plate-forme qui met en œuvre le support C ++ 14.
Bien que certains types aient été éclatés dans leurs propres en-têtes (par exemple GSL / SPAN), il est le plus simple d'inclure simplement GSL / GSL et d'accéder à toute la bibliothèque.
Remarque: Nous encourageons les contributions qui améliorent ou affinez les types de cette bibliothèque ainsi que les ports vers d'autres plateformes. Veuillez consulter contribution.md pour plus d'informations sur la contribution.
Ce projet a adopté le code de conduite open source Microsoft. Pour plus d'informations, consultez le code de conduite FAQ ou contactez [email protected] avec toute question ou commentaire supplémentaire.
Ce projet utilise la bibliothèque de tests Google. Veuillez consulter le fichier ThirdPartYNOTICES.TXT pour plus de détails concernant l'octroi de licences de Google Test.
Fonctionnalité | Soutenu? | Description |
---|---|---|
1. Vues | ||
propriétaire | ☑ | Un alias pour un pointeur brut |
not_null | ☑ | Restreint un pointeur / pointeur intelligent pour contenir des valeurs non nuls |
portée | ☑ | Une vue sur une séquence de mémoire contigu. Basé sur la version standardisée de std::span , cependant gsl::span applique la vérification des limites. |
span_p | ☐ | S'étend sur une gamme partant d'un pointeur à la première place pour laquelle le prédicat est vrai |
Basic_zstring | ☑ | Un pointeur vers une corde C (tableau à termes à termes zéro) avec un type de char des modèles |
zstring | ☑ | Un alias à basic_zstring avec une étendue dynamique et un type char de char |
czString | ☑ | Un alias à basic_zstring avec une étendue dynamique et un type char de const char |
wzstring | ☑ | Un alias à basic_zstring avec une étendue dynamique et un type de char de wchar_t |
cwzstring | ☑ | Un alias à basic_zstring avec une étendue dynamique et un type char de const wchar_t |
u16zstring | ☑ | Un alias à basic_zstring avec une étendue dynamique et un type de char de char16_t |
cu16zstring | ☑ | Un alias à basic_zstring avec une étendue dynamique et un type de char de const char16_t |
u32zstring | ☑ | Un alias à basic_zstring avec une étendue dynamique et un type de char de char32_t |
cu32zstring | ☑ | Un alias à basic_zstring avec une étendue dynamique et un type de char de const char32_t |
2. Propriétaires | ||
unique_ptr | ☑ | Un alias à std::unique_ptr |
shared_ptr | ☑ | Un alias à std::shared_ptr |
stack_array | ☐ | Un tableau alloué à pile |
dyn_array | ☐ | Un réseau alloué au tas |
3. Affirmation | ||
S'attendre à | ☑ | Une affirmation de condition préalable; en échec, il se termine |
Assure | ☑ | Une affirmation de postcondition; en échec, il se termine |
4. Utilitaires | ||
Move_owner | ☐ | Une fonction d'assistance qui déplace un owner vers l'autre |
octet | ☑ | Soit un alias à std::byte ou un type d'octet |
final_action | ☑ | Une classe de style Raii qui invoque un fonctor sur sa destruction |
enfin | ☑ | Une fonction d'assistance instanciant final_action |
Gsl_suppress | ☑ | Une macro qui prend un argument et le transforme en [[gsl::suppress(x)]] ou [[gsl::suppress("x")]] |
[[implicite]] | ☐ | Un "marqueur" pour mettre des constructeurs à argument unique pour les rendre explicitement non explicites |
indice | ☑ | Un type à utiliser pour toute l'indexation des conteneurs et des réseaux (actuellement un alias pour std::ptrdiff_t ) |
joint_thread | ☐ | Une version de style Raii de std::thread qui rejoint |
étroit | ☑ | Une version vérifiée de narrow_cast ; il peut lancer un rétrécissement_error |
étroite | ☑ | Un casting de rétrécissement pour les valeurs et un synonyme de static_cast |
rétrécissement | ☑ | Un type d'exception personnalisé jeté par étroit |
5. Concepts | ☐ |
Fonctionnalité | Soutenu? | Description |
---|---|---|
strict_not_null | ☑ | Une version plus stricte de Not_Null avec des constructeurs explicites |
multi_span | ☐ | Déprécié. Span multidimensionnel. |
strided_span | ☐ | Déprécié. Le soutien à ce type a été interrompu. |
Basic_string_span | ☐ | Déprécié. Comme span mais pour les chaînes avec un type de char des modèles |
string_span | ☐ | Déprécié. Un alias à basic_string_span avec un type char de char |
cString_span | ☐ | Déprécié. Un alias à basic_string_span avec un type char de const char |
wstring_span | ☐ | Déprécié. Un alias à basic_string_span avec un type de char de wchar_t |
cwstring_span | ☐ | Déprécié. Un alias à basic_string_span avec un type char de const wchar_t |
u16string_span | ☐ | Déprécié. Un alias à basic_string_span avec un type de char de char16_t |
cu16string_span | ☐ | Déprécié. Un alias à basic_string_span avec un type de char de const char16_t |
u32string_span | ☐ | Déprécié. Un alias à basic_string_span avec un type de char de char32_t |
cu32string_span | ☐ | Déprécié. Un alias à basic_string_span avec un type de char de const char32_t |
Ceci est basé sur la semi-spécification de la CPPCoreguidelines.
Le GSL soutient officiellement les grandes versions récentes de Visual Studio avec MSVC et LLVM, GCC, Clang et Xcode avec Apple-Clang. Pour chacune de ces grandes versions, le GSL prend officiellement le soutient officiellement C ++ 14, C ++ 17, C ++ 20 et C ++ 23 (lorsqu'il est pris en charge par le compilateur). Vous trouverez ci-dessous un tableau montrant les versions actuellement testées (voir également [.github / workflows / compilers.yml] (le workflow).).
Compilateur | Les versions de jeu d'outils sont testées actuellement |
---|---|
GCC | 10, 11, 12 |
Code de xé | 14.3.1, 15.4 |
Bruit | 13, 14, 15 |
Visual Studio avec MSVC | Vs2019, vs2022 |
Visual Studio avec LLVM | Vs2019, vs2022 |
Si vous réussissez à porter GSL sur une autre plate-forme, nous serions ravis de vous entendre!
Cible | Statut CI / CD |
---|---|
ios | |
Androïde |
Remarque: Ces étapes CI / CD sont exécutées avec chaque demande de traction, mais les échecs ne sont pas bloqués.
Pour construire les tests, vous aurez besoin de ce qui suit:
Ces étapes supposent que le code source de ce référentiel a été cloné dans un répertoire nommé c:GSL
.
Créez un répertoire pour contenir les sorties de build pour une architecture particulière (nous l'appelons c:GSLbuild-x86
dans cet exemple).
cd GSL
md build-x86
cd build-x86
Configurez CMake pour utiliser le compilateur de votre choix (vous pouvez voir une liste en exécutant cmake --help
).
cmake -G "Visual Studio 15 2017" c:GSL
Construire la suite de tests (dans ce cas, dans la configuration de débogage, la version est un autre bon choix).
cmake --build . --config Debug
Exécutez la suite de tests.
ctest -C Debug
Tous les tests doivent passer - indiquant que votre plate-forme est entièrement prise en charge et vous êtes prêt à utiliser les types GSL!
Vous pouvez télécharger et installer GSL à l'aide du gestionnaire de dépendance VCPKG:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
vcpkg install ms-gsl
Le port GSL de VCPKG est tenu à jour par les membres de l'équipe Microsoft et les contributeurs communautaires. Si la version est obsolète, veuillez créer une demande de problème ou d'extraction sur le référentiel VCPKG.
Comme les types sont entièrement mis en œuvre en ligne dans les en-têtes, il n'y a pas d'exigences de liaison.
Vous pouvez copier le répertoire GSL dans votre arborescence source afin qu'il soit disponible pour votre compilateur, puis incluez les en-têtes appropriés dans votre programme.
Alternativement, définissez votre compilateur Inclut Flag Path pour pointer vers le dossier de développement GSL ( c:GSLinclude
dans l'exemple ci-dessus) ou le dossier d'installation (après avoir exécuté l'installation). Par exemple, par exemple
Msvc ++
/I c:GSLinclude
GCC / CLANG
-I$HOME/dev/GSL/include
Inclure la bibliothèque en utilisant:
#include <gsl/gsl>
La bibliothèque fournit un fichier de configuration pour CMake, une fois installé, il peut être trouvé via find_package
.
Ce qui, une fois réussi, ajoutera une cible de bibliothèque appelée Microsoft.GSL::GSL
que vous pouvez utiliser via le mécanisme habituel target_link_libraries
.
find_package (Microsoft.GSL CONFIG REQUIRED )
target_link_libraries (foobar PRIVATE Microsoft.GSL::GSL)
Si vous utilisez CMake version 3.11+, vous pouvez utiliser le module officiel FetchContent. Cela vous permet d'intégrer facilement GSL dans votre projet.
# NOTE: This example uses CMake version 3.14 (FetchContent_MakeAvailable).
# Since it streamlines the FetchContent process
cmake_minimum_required ( VERSION 3.14)
include (FetchContent)
FetchContent_Declare(GSL
GIT_REPOSITORY "https://github.com/microsoft/GSL"
GIT_TAG "v4.1.0"
GIT_SHALLOW ON
)
FetchContent_MakeAvailable(GSL)
target_link_libraries (foobar PRIVATE Microsoft.GSL::GSL)
Pour les utilisateurs de Visual Studio, le fichier gsl.natvis dans le répertoire racine du référentiel peut être ajouté à votre projet si vous souhaitez une visualisation plus utile des types GSL dans le débogueur Visual Studio que ce qui serait proposé par défaut.
Pour plus d'informations sur Microsoft Gray Systems Lab (GSL) de la gestion des données appliqués et de la recherche système, voir https://aka.ms/gsl.