Die Richtlinien Support Library (GSL) enthält Funktionen und Typen, die für die Verwendung der C ++ - Kernrichtlinien vorgeschlagen werden, die von der Standard -C ++ - Fundament beibehalten werden. Dieses Repo enthält Microsoft -Implementierung von GSL.
Die gesamte Implementierung wird in den Headern unter dem GSL -Verzeichnis inline zur Verfügung gestellt. Die Implementierung setzt im Allgemeinen eine Plattform voraus, die C ++ 14 -Unterstützung implementiert.
Während einige Typen in ihre eigenen Header unterteilt wurden (z. B. GSL/Span), ist es einfach, nur GSL/GSL einzubeziehen und Zugriff auf die gesamte Bibliothek zu erhalten.
Hinweis: Wir ermutigen Beiträge, die die Typen in dieser Bibliothek sowie Ports auf anderen Plattformen verbessern oder verfeinern. Weitere Informationen zum Beitrag zum Mitverhalten finden Sie unter Beitrags.md.
Dieses Projekt hat den Microsoft Open Source -Verhaltenscode übernommen. Weitere Informationen finden Sie im FAQ oder wenden Sie sich an [email protected] mit zusätzlichen Fragen oder Kommentaren.
Dieses Projekt nutzt die Google Test -Testbibliothek. Weitere Informationen zur Lizenzierung des Google -Tests finden Sie in der Datei "ThirdPartynotices.txt".
Besonderheit | Unterstützt? | Beschreibung |
---|---|---|
1. Ansichten | ||
Eigentümer | ☑ | Ein Alias für einen rohen Zeiger |
Not_null | ☑ | Schränkt einen Zeiger/intelligenten Zeiger ein, um Nicht-Null-Werte zu halten |
Spanne | ☑ | Eine Ansicht über eine zusammenhängende Reihenfolge des Gedächtnisses. Basierend auf der standardisierten Version von std::span , jedoch erzwingt gsl::span die Grenzenprüfung. |
span_p | ☐ | Erstreckt sich über einen Bereich, der von einem Zeiger bis zum ersten Ort, an dem das Prädikat wahr ist |
Basic_zstring | ☑ | Ein Zeiger auf ein C-String (nullterminiertes Array) mit einem Vorlagen-Zeichen-Typ |
Zstring | ☑ | Ein Alias zu basic_zstring mit dynamischem Ausmaß und einem char -Typen -Char |
czstring | ☑ | Ein Alias zu basic_zstring mit dynamischem Ausmaß und einem char const char |
wzstring | ☑ | Ein Alias zu basic_zstring mit dynamischem Ausmaß und einem charbischen Typ von wchar_t |
cwzstring | ☑ | Ein Alias zu basic_zstring mit dynamischem Ausmaß und einem charbischen Typ von const wchar_t |
U16ZString | ☑ | Ein Alias zu basic_zstring mit dynamischem Ausmaß und einem char -Typ von char16_t |
Cu16zstring | ☑ | Ein Alias zu basic_zstring mit dynamischem Ausmaß und einem char const char16_t |
U32ZString | ☑ | Ein Alias zu basic_zstring mit dynamischem Ausmaß und einem char -Typ von char32_t |
Cu32zString | ☑ | Ein Alias zu basic_zstring mit dynamischem Ausmaß und einem char const char32_t |
2. Besitzer | ||
Unique_ptr | ☑ | Ein Alias zu std::unique_ptr |
Shared_ptr | ☑ | Ein Alias zu std::shared_ptr |
Stack_array | ☐ | Ein stapelallokiertes Array |
dyn_array | ☐ | Ein haufenalloziertes Array |
3. Behauptungen | ||
Erwartet | ☑ | Eine Voraussetzung; Beim Versagen endet es |
Sichert | ☑ | Eine Behauptung nach der Nachschläge; Beim Versagen endet es |
4. Versorgungsunternehmen | ||
MOVE_OWNER | ☐ | Eine Helferfunktion, die einen owner zum anderen bewegt |
Byte | ☑ | Entweder ein Alias zu std::byte oder ein Byte -Typ |
Final_Action | ☑ | Eine Raii -Style -Klasse, die einen Funkern auf seine Zerstörung hervorruft |
Endlich | ☑ | Eine Helferfunktion, die endgültig ist. |
GSL_Suppress | ☑ | Ein Makro, das ein Argument nimmt und es in [[gsl::suppress(x)]] oder [[gsl::suppress("x")]] |
[[implizit]] | ☐ | Ein "Marker", der auf Single-Argument-Konstruktoren angewendet wird |
Index | ☑ | Ein Typ, der für alle Container- und Array -Indexierung verwendet werden kann (derzeit ein Alias für std::ptrdiff_t ) |
Joining_Thread | ☐ | Eine Raii -Stilversion von std::thread , der sich verbindet |
eng | ☑ | Eine geprüfte Version von narrow_cast ; Es kann Verengen werfen_error werfen |
schmal_cast | ☑ | Eine Verengungen für Werte und ein Synonym für static_cast |
SCROWOWing_Error | ☑ | Ein benutzerdefinierter Ausnahmetyp, der von schmal geworfen wird |
5. Konzepte | ☐ |
Besonderheit | Unterstützt? | Beschreibung |
---|---|---|
strict_not_null | ☑ | Eine strengere Version von Not_Null mit expliziten Konstruktoren |
Multi_span | ☐ | Veraltet. Mehrdimensionale Spannweite. |
STREFT_SPAN | ☐ | Veraltet. Die Unterstützung für diesen Typ wurde eingestellt. |
Basic_string_span | ☐ | Veraltet. Wie span , aber für Saiten mit einem Vorlagen -Zeichen -Typ |
String_span | ☐ | Veraltet. Ein Alias zu basic_string_span mit einer char -Art von char |
cstring_span | ☐ | Veraltet. Ein Alias zu basic_string_span mit einem char const char |
wstring_span | ☐ | Veraltet. Ein Alias zu basic_string_span mit einer char -Art von wchar_t |
cwstring_span | ☐ | Veraltet. Ein Alias zu basic_string_span mit einem char const wchar_t |
u16string_span | ☐ | Veraltet. Ein Alias zu basic_string_span mit einer char -Art von char16_t |
cu16string_span | ☐ | Veraltet. Ein Alias zu basic_string_span mit einem char const char16_t |
u32string_span | ☐ | Veraltet. Ein Alias zu basic_string_span mit einer char -Art von char32_t |
Cu32String_span | ☐ | Veraltet. Ein Alias zu basic_string_span mit einem char const char32_t |
Dies basiert auf CPPCOREGUIDELINES SEMI-spezifiziert.
Die GSL unterstützt offiziell aktuelle Hauptversionen von Visual Studio mit MSVC und LLVM, GCC, Clang und Xcode mit Apple-Clang. Für jede dieser Hauptversionen unterstützt die GSL offiziell C ++ 14, C ++ 17, C ++ 20 und C ++ 23 (wenn sie vom Compiler unterstützt). Im Folgenden finden Sie eine Tabelle, die die derzeit getesteten Versionen zeigt (siehe auch [.github/Workflows/Compiler.yml] (der Workflow).)
Compiler | Derzeit getestet ToolSet -Versionen |
---|---|
GCC | 10, 11, 12 |
Xcode | 14.3.1, 15.4 |
Klang | 13, 14, 15 |
Visual Studio mit MSVC | VS2019, VS2022 |
Visual Studio mit LLVM | VS2019, VS2022 |
Wenn Sie GSL erfolgreich auf eine andere Plattform portieren, würden wir gerne von Ihnen hören!
Ziel | CI/CD -Status |
---|---|
iOS | |
Android |
HINWEIS: Diese CI/CD-Schritte werden mit jeder Zuganfrage ausgeführt, aber Fehler sind nicht blockiert.
Um die Tests zu erstellen, benötigen Sie Folgendes:
Diese Schritte gehen davon aus, dass der Quellcode dieses Repositorys in ein Verzeichnis namens c:GSL
kloniert wurde.
Erstellen Sie ein Verzeichnis, das die Build-Ausgänge für eine bestimmte Architektur enthält (wir nennen es in diesem Beispiel c:GSLbuild-x86
).
cd GSL
md build-x86
cd build-x86
Konfigurieren Sie CMake so, dass Sie den Compiler Ihrer Wahl verwenden (Sie können eine Liste durch Ausführen cmake --help
sehen).
cmake -G "Visual Studio 15 2017" c:GSL
Erstellen Sie die Testsuite (in diesem Fall in der Debug -Konfiguration ist Release eine weitere gute Wahl).
cmake --build . --config Debug
Führen Sie die Testsuite aus.
ctest -C Debug
Alle Tests sollten bestehen - die Angabe Ihrer Plattform ist vollständig unterstützt und Sie sind bereit, die GSL -Typen zu verwenden!
Sie können GSL mit dem VCPKG -Abhängigkeits -Manager herunterladen und installieren:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
vcpkg install ms-gsl
Der GSL -Port in VCPKG wird von Microsoft -Teammitgliedern und Community -Mitwirkenden auf dem Laufenden gehalten. Wenn die Version veraltet ist, erstellen Sie bitte eine Ausgabe- oder Pull -Anfrage im VCPKG -Repository.
Da die Typen in den Headern vollständig implementiert sind, gibt es keine Verknüpfungsanforderungen.
Sie können das GSL -Verzeichnis in Ihren Quellbaum kopieren, damit es Ihrem Compiler zur Verfügung steht, und dann die entsprechenden Header in Ihr Programm aufnehmen.
Legen Sie alternativ das Pfadflag Ihres Compiler -Include -Pfad -Flags so ein, dass sie auf den GSL -Entwicklungsordner ( c:GSLinclude
im obigen Beispiel) oder Installationsordner (nach Ausführen der Installation) verweisen. Z.B.
MSVC ++
/I c:GSLinclude
GCC/Clang
-I$HOME/dev/GSL/include
Fügen Sie die Bibliothek mit: einbeziehen:
#include <gsl/gsl>
Die Bibliothek bietet eine Konfigurationsdatei für CMAKE, die nach der Installation über find_package
gefunden werden kann.
Was, wenn er erfolgreich ist, ein Bibliotheksziel namens Microsoft.GSL::GSL
hinzufügt, den Sie über den üblichen Mechanismus target_link_libraries
verwenden können.
find_package (Microsoft.GSL CONFIG REQUIRED )
target_link_libraries (foobar PRIVATE Microsoft.GSL::GSL)
Wenn Sie CMake Version 3.11+ verwenden, können Sie das offizielle FetchContent -Modul verwenden. Auf diese Weise können Sie GSL problemlos in Ihr Projekt einbeziehen.
# 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)
Für Visual Studio -Benutzer kann die Datei GSL.natvis im Stammverzeichnis des Repository zu Ihrem Projekt hinzugefügt werden, wenn Sie eine hilfreiche Visualisierung von GSL -Typen im Visual Studio -Debugger wünschen, als dies standardmäßig angeboten würde.
Informationen zu Microsoft Gray Systems Lab (GSL) über angewandte Datenverwaltung und Systemforschung finden Sie unter https://aka.ms/gsl.