La Biblioteca de soporte de directrices (GSL) contiene funciones y tipos que sugeren para el uso por las pautas del núcleo de C ++ mantenidas por la Fundación C ++ estándar. Este repositorio contiene la implementación de Microsoft de GSL.
Toda la implementación se proporciona en línea en los encabezados bajo el directorio GSL. La implementación generalmente asume una plataforma que implementa el soporte C ++ 14.
Si bien algunos tipos se han dividido en sus propios encabezados (por ejemplo, GSL/SPAN), es más simple incluir GSL/GSL y obtener acceso a toda la biblioteca.
Nota: Alentamos las contribuciones que mejoran o refinan cualquiera de los tipos en esta biblioteca, así como los puertos a otras plataformas. Consulte Contriping.MD para obtener más información sobre la contribución.
Este proyecto ha adoptado el Código de Conducta Open Open Microsoft. Para obtener más información, consulte el Código de Conducta Preguntas frecuentes o comuníquese con [email protected] con cualquier pregunta o comentario adicional.
Este proyecto utiliza la biblioteca de pruebas de Google. Consulte el archivo ThirdPartynotices.txt para obtener detalles sobre la prueba de licencia de Google.
| Característica | Compatible? | Descripción |
|---|---|---|
| 1. Vistas | ||
| dueño | ☑ | Un alias para un puntero sin procesar |
| Not_null | ☑ | Restringe un puntero de puntero/inteligente para contener valores no nulos |
| durar | ☑ | Una vista sobre una secuencia contigua de memoria. Basado en la versión estandarizada de std::span , sin embargo, gsl::span aplica la verificación de límites. |
| span_p | ☐ | Abarca un rango que comienza desde un puntero hasta el primer lugar para el cual el predicado es verdadero |
| Basic_zstring | ☑ | Un puntero a una cadena C (matriz terminada con cero) con un tipo de char con plantilla |
| ztring | ☑ | Un alias a basic_zstring con extensión dinámica y un tipo de char Char |
| czstring | ☑ | Un alias a basic_zstring con extensión dinámica y un tipo de char const char |
| wzstring | ☑ | Un alias para basic_zstring con extensión dinámica y un tipo de char wchar_t |
| cwzstring | ☑ | Un alias para basic_zstring con extensión dinámica y un tipo de char const wchar_t |
| U16zstring | ☑ | Un alias para basic_zstring con extensión dinámica y un tipo de char16_t |
| cu16zstring | ☑ | Un alias para basic_zstring con extensión dinámica y un tipo de char const char16_t |
| U32zstring | ☑ | Un alias para basic_zstring con extensión dinámica y un tipo de char32_t |
| cu32zstring | ☑ | Un alias para basic_zstring con extensión dinámica y un tipo de char de const char32_t |
| 2. Propietarios | ||
| único_ptr | ☑ | Un alias para std::unique_ptr |
| shared_ptr | ☑ | Un alias para std::shared_ptr |
| stack_array | ☐ | Una matriz alocada con pila |
| dyn_array | ☐ | Una matriz asignada por montón |
| 3. Afirmaciones | ||
| Esperanza | ☑ | Una afirmación de condición previa; Al fallar, termina |
| Asegurar | ☑ | Una afirmación posterior a la condición; Al fallar, termina |
| 4. Utilidades | ||
| Move_wner | ☐ | Una función de ayudante que mueve a un owner al otro |
| byte | ☑ | Ya sea un alias a std::byte o un tipo de byte |
| final_accion | ☑ | Una clase de estilo raii que invoca un functor en su destrucción |
| finalmente | ☑ | Una función de ayudante instanciando final_accion |
| GSL_SUPISPRESS | ☑ | Una macro que toma un argumento y la convierte en [[gsl::suppress(x)]] o [[gsl::suppress("x")]] |
| [[implícito]] | ☐ | Un "marcador" para poner en constructor de argumento único para que no sean explícitos |
| índice | ☑ | Un tipo para usar para toda la indexación de contenedores y matrices (actualmente un alias para std::ptrdiff_t ) |
| uniring_thread | ☐ | Una versión de estilo raii de std::thread que se une |
| angosto | ☑ | Una versión verificada de narrow_cast ; puede lanzar nrowing_error |
| estrecho | ☑ | Un elenco estrechante para los valores y un sinónimo de static_cast |
| Marrowing_error | ☑ | Un tipo de excepción personalizado lanzado por estrecho |
| 5. Conceptos | ☐ |
| Característica | Compatible? | Descripción |
|---|---|---|
| strict_not_null | ☑ | Una versión más estricta de Not_Null con constructores explícitos |
| multi_span | ☐ | Desapercibido. Tramo multidimensional. |
| stridid_span | ☐ | Desapercibido. El soporte para este tipo ha sido descontinuado. |
| BASIC_STRING_SPAN | ☐ | Desapercibido. Como span pero para cuerdas con un tipo de char con plantilla |
| string_span | ☐ | Desapercibido. Un alias a basic_string_span con un tipo de char char |
| cstring_span | ☐ | Desapercibido. Un alias a basic_string_span con un tipo de char const char |
| wstring_span | ☐ | Desapercibido. Un alias a basic_string_span con un tipo de char wchar_t |
| cwstring_span | ☐ | Desapercibido. Un alias a basic_string_span con un tipo de char const wchar_t |
| U16String_Span | ☐ | Desapercibido. Un alias para basic_string_span con un tipo de char16_t |
| cu16string_span | ☐ | Desapercibido. Un alias a basic_string_span con un tipo de char de const char16_t |
| U32String_Span | ☐ | Desapercibido. Un alias a basic_string_span con un tipo de char32_t |
| CU32String_Span | ☐ | Desapercibido. Un alias a basic_string_span con un tipo de char de const char32_t |
Esto se basa en la semi especificación CPPCoreGuidelines.
El GSL admite oficialmente versiones principales recientes de Visual Studio con MSVC y LLVM, GCC, Clang y Xcode con Apple-Clang. Para cada una de estas versiones principales, el GSL admite oficialmente C ++ 14, C ++ 17, C ++ 20 y C ++ 23 (cuando es compatible con el compilador). A continuación se muestra una tabla que muestra las versiones que se están probando actualmente (ver también [.github/workflows/compilers.yml] (el flujo de trabajo).
| Compilador | Versiones de conjunto de herramientas actualmente probadas |
|---|---|
| GCC | 10, 11, 12 |
| Xcode | 14.3.1, 15.4 |
| Sonido metálico | 13, 14, 15 |
| Visual Studio con MSVC | VS2019, VS2022 |
| Visual Studio con LLVM | VS2019, VS2022 |
¡Si se acerque con éxito GSL a otra plataforma, nos encantaría saber de usted!
| Objetivo | Estado de CI/CD |
|---|---|
| iOS | |
| Androide |
Nota: Estos pasos de CI/CD se ejecutan con cada solicitud de extracción, sin embargo, las fallas en ellas no son bloqueadas.
Para construir las pruebas, necesitará lo siguiente:
Estos pasos asumen que el código fuente de este repositorio se ha clonado en un directorio llamado c:GSL .
Cree un directorio para contener las salidas de compilación para una arquitectura particular (la nombramos c:GSLbuild-x86 en este ejemplo).
cd GSL
md build-x86
cd build-x86
Configure Cmake para usar el compilador de su elección (puede ver una lista ejecutando cmake --help ).
cmake -G "Visual Studio 15 2017" c:GSL
Construya la suite de prueba (en este caso, en la configuración de depuración, la versión es otra buena opción).
cmake --build . --config Debug
Ejecute la suite de prueba.
ctest -C Debug
Todas las pruebas deben pasar, lo que indica que su plataforma es totalmente compatible y está listo para usar los tipos GSL.
Puede descargar e instalar GSL usando el Administrador de dependencias VCPKG:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
vcpkg install ms-gsl
El puerto GSL en VCPKG se mantiene actualizado por los miembros del equipo de Microsoft y los contribuyentes comunitarios. Si la versión está desactualizada, cree un problema o extraiga la solicitud en el repositorio de VCPKG.
Como los tipos se implementan completamente en línea en los encabezados, no hay requisitos de vinculación.
Puede copiar el directorio GSL en su árbol de origen para que esté disponible para su compilador, luego incluya los encabezados apropiados en su programa.
Alternativamente, establezca el indicador de ruta de incluido de su compilador para apuntar a la carpeta de desarrollo GSL ( c:GSLinclude en el ejemplo anterior) o la carpeta de instalación (después de ejecutar la instalación). P.ej.
MSVC ++
/I c:GSLinclude
GCC/CLANG
-I$HOME/dev/GSL/include
Incluya la biblioteca usando:
#include <gsl/gsl>
La biblioteca proporciona un archivo de configuración para cmake, una vez instalado, se puede encontrar a través de find_package .
Que, cuando tenga éxito, agregará el objetivo de la biblioteca llamado Microsoft.GSL::GSL que puede usar a través del mecanismo habitual target_link_libraries .
find_package (Microsoft.GSL CONFIG REQUIRED )
target_link_libraries (foobar PRIVATE Microsoft.GSL::GSL)Si está utilizando CMake versión 3.11+, puede usar el módulo oficial de FetchContent. Esto le permite incorporar fácilmente a GSL en su proyecto.
# 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)Para los usuarios de Visual Studio, el archivo gsl.natvis en el directorio raíz del repositorio se puede agregar a su proyecto si desea una visualización más útil de los tipos GSL en el depurador de Visual Studio de lo que se ofrecería por defecto.
Para obtener información sobre Microsoft Gray Systems Lab (GSL) de la gestión de datos aplicados y la investigación del sistema, consulte https://aka.ms/gsl.