A Biblioteca de Suporte de Diretrizes (GSL) contém funções e tipos que são sugeridos para uso pelas diretrizes do núcleo C ++ mantidas pela fundação C ++ padrão. Este repo contém a implementação do GSL pela Microsoft.
Toda a implementação é fornecida em linha nos cabeçalhos no diretório GSL. A implementação geralmente assume uma plataforma que implementa o suporte C ++ 14.
Embora alguns tipos tenham sido divididos em seus próprios cabeçalhos (por exemplo, GSL/span), é mais simples incluir apenas GSL/GSL e obter acesso a toda a biblioteca.
Nota: Incentivamos as contribuições que melhoram ou refinam qualquer um dos tipos nesta biblioteca, bem como portas para outras plataformas. Consulte Contribuindo.md para obter mais informações sobre a contribuição.
Este projeto adotou o Código de Conduta Open Microsoft. Para obter mais informações, consulte o Código de Conduta Perguntas frequentes ou entre em contato com [email protected] com quaisquer perguntas ou comentários adicionais.
Este projeto utiliza a biblioteca de testes de teste do Google. Consulte o arquivo TercentPartynotices.txt para obter detalhes sobre o licenciamento do teste do Google.
Recurso | Suportado? | Descrição |
---|---|---|
1. Visualizações | ||
proprietário | ☑ | Um pseudônimo para um ponteiro cru |
não_null | ☑ | Restringe um ponteiro/ponteiro inteligente para manter valores não nulos |
span | ☑ | Uma visão sobre uma sequência contígua de memória. Com base na versão padronizada do std::span , no entanto, gsl::span aplica a verificação dos limites. |
span_p | ☐ | Abrange um intervalo, começando de um ponteiro até o primeiro lugar para o qual o predicado é verdadeiro |
Basic_zString | ☑ | Um ponteiro para uma cordão C (matriz terminada zero) com um tipo de char modificado |
zstring | ☑ | Um pseudônimo para basic_zstring com extensão dinâmica e um tipo de char de char |
czstring | ☑ | Um pseudônimo para basic_zstring com extensão dinâmica e um tipo de char de const char |
wzString | ☑ | Um alias para basic_zstring com extensão dinâmica e um tipo de char wchar_t |
CwzString | ☑ | Um alias para basic_zstring com extensão dinâmica e um tipo de char de const wchar_t |
U16zString | ☑ | Um alias para basic_zstring com extensão dinâmica e um tipo de char de char16_t |
Cu16zString | ☑ | Um alias para basic_zstring com extensão dinâmica e um tipo de char de const char16_t |
U32zString | ☑ | Um alias para basic_zstring com extensão dinâmica e um tipo de char de char32_t |
Cu32zString | ☑ | Um alias para basic_zstring com extensão dinâmica e um tipo de char de const char32_t |
2. Proprietários | ||
exclusivo_ptr | ☑ | Um pseudônimo para std::unique_ptr |
shared_ptr | ☑ | Um pseudônimo para std::shared_ptr |
Stack_array | ☐ | Uma matriz alocada em pilha |
dyn_array | ☐ | Uma matriz alocada por heap |
3. Afirações | ||
Espera | ☑ | Uma afirmação pré -condição; na falha, termina |
Garante | ☑ | Uma afirmação pós -condição; na falha, termina |
4. Utilitários | ||
move_owner | ☐ | Uma função auxiliar que move um owner para o outro |
byte | ☑ | Um pseudônimo para std::byte ou um tipo de byte |
final_action | ☑ | Uma aula de estilo Raii que invoca um functor em sua destruição |
finalmente | ☑ | Uma função auxiliar instantando Final_action |
Gsl_supress | ☑ | Uma macro que leva uma discussão e a transforma em [[gsl::suppress(x)]] ou [[gsl::suppress("x")]] |
[[implícito]] | ☐ | Um "marcador" para colocar construtores de argumento único para torná-los explicitamente não explícitos |
índice | ☑ | std::ptrdiff_t tipo a ser usado para todos |
JONING_THREAD | ☐ | Uma versão do estilo Raii de std::thread que se junta |
estreito | ☑ | Uma versão verificada de narrow_cast ; pode jogar estrelamento_error |
estreito_cast | ☑ | Um elenco estreito para valores e um sinônimo de static_cast |
estrelamento_error | ☑ | Um tipo de exceção personalizado jogado por estreito |
5. Conceitos | ☐ |
Recurso | Suportado? | Descrição |
---|---|---|
strict_not_null | ☑ | Uma versão mais rigorosa de não_null com construtores explícitos |
Multi_span | ☐ | Descontinuado. Extensão multidimensional. |
strided_span | ☐ | Descontinuado. O suporte a esse tipo foi descontinuado. |
Basic_string_span | ☐ | Descontinuado. Como span , mas para cordas com um tipo de char modificado |
String_span | ☐ | Descontinuado. Um pseudônimo para basic_string_span com um tipo de char de char |
cstring_span | ☐ | Descontinuado. Um pseudônimo para basic_string_span com um tipo de char de const char |
wstring_span | ☐ | Descontinuado. Um alias para basic_string_span com um tipo de char de wchar_t |
cwstring_span | ☐ | Descontinuado. Um alias para basic_string_span com um tipo de char de const wchar_t |
U16string_span | ☐ | Descontinuado. Um pseudônimo para basic_string_span com um tipo de char de char16_t |
CU16STRING_SPAN | ☐ | Descontinuado. Um pseudônimo para basic_string_span com um tipo de char de const char16_t |
u32string_span | ☐ | Descontinuado. Um alias para basic_string_span com um tipo de char de char32_t |
Cu32String_Span | ☐ | Descontinuado. Um pseudônimo para basic_string_span com um tipo de char de const char32_t |
Isso é baseado na semi-especificação do CPPCoreGuidelines.
O GSL suporta oficialmente versões principais recentes do Visual Studio com MSVC e LLVM, GCC, CLANG e XCODE com Apple-Clang. Para cada uma dessas versões principais, o GSL suporta oficialmente C ++ 14, C ++ 17, C ++ 20 e C ++ 23 (quando suportado pelo compilador). Abaixo está uma tabela mostrando as versões atualmente sendo testadas (também consulte [.github/workflows/compilers.yml] (o fluxo de trabalho).).)
Compilador | Versões do conjunto de ferramentas atualmente testadas |
---|---|
GCC | 10, 11, 12 |
Xcode | 14.3.1, 15.4 |
Clang | 13, 14, 15 |
Visual Studio com MSVC | VS2019, vs2022 |
Visual Studio com LLVM | VS2019, vs2022 |
Se você portar com sucesso GSL para outra plataforma, gostaríamos de ouvir de você!
Alvo | Status CI/CD |
---|---|
iOS | |
Android |
Nota: Essas etapas de CI/CD são executadas com cada solicitação de tração, no entanto, as falhas nelas não são bloqueadas.
Para construir os testes, você precisará do seguinte:
Essas etapas assumem que o código -fonte deste repositório foi clonado em um diretório chamado c:GSL
.
Crie um diretório para conter as saídas de compilação para uma arquitetura específica (nós o nomeamos c:GSLbuild-x86
neste exemplo).
cd GSL
md build-x86
cd build-x86
Configure o CMake para usar o compilador de sua escolha (você pode ver uma lista executando cmake --help
).
cmake -G "Visual Studio 15 2017" c:GSL
Construa o conjunto de testes (neste caso, na configuração de depuração, a liberação é outra boa opção).
cmake --build . --config Debug
Execute a suíte de teste.
ctest -C Debug
Todos os testes devem passar - indicando que sua plataforma está totalmente suportada e você está pronto para usar os tipos GSL!
Você pode baixar e instalar o GSL usando o gerenciador de dependência vcpkg:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
vcpkg install ms-gsl
A porta GSL no VCPKG é mantida atualizada pelos membros da equipe da Microsoft e pelos colaboradores da comunidade. Se a versão estiver desatualizada, crie uma solicitação de problema ou puxe no repositório VCPKG.
Como os tipos são totalmente implementados em linha nos cabeçalhos, não há requisitos de vinculação.
Você pode copiar o diretório GSL para sua árvore de origem para que ele esteja disponível para o seu compilador e inclua os cabeçalhos apropriados em seu programa.
Alternativamente, defina o sinalizador do seu compilador para apontar para a pasta de desenvolvimento GSL ( c:GSLinclude
no exemplo acima) ou a pasta de instalação (após a execução da instalação). Por exemplo.
MSVC ++
/I c:GSLinclude
Gcc/clang
-I$HOME/dev/GSL/include
Inclua a biblioteca usando:
#include <gsl/gsl>
A biblioteca fornece um arquivo de configuração para CMake, uma vez instalado, pode ser encontrado via find_package
.
O que, quando bem -sucedido, adicionará o destino da biblioteca chamado Microsoft.GSL::GSL
, que você pode usar através do mecanismo usual target_link_libraries
.
find_package (Microsoft.GSL CONFIG REQUIRED )
target_link_libraries (foobar PRIVATE Microsoft.GSL::GSL)
Se você estiver usando o CMake versão 3.11+, poderá usar o módulo Oficial FetchContent. Isso permite que você incorpore facilmente o GSL em seu projeto.
# 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 usuários do Visual Studio, o arquivo GSL.natvis no diretório raiz do repositório pode ser adicionado ao seu projeto se você desejar uma visualização mais útil dos tipos GSL no depurador do Visual Studio do que seria oferecido por padrão.
Para obter informações sobre o Microsoft Gray Systems Lab (GSL) de gerenciamento de dados aplicado e pesquisa de sistema, consulte https://aka.ms/gsl.