가이드 라인 지원 라이브러리 (GSL)에는 표준 C ++ 재단이 유지 관리하는 C ++ 코어 가이드 라인에서 사용하기 위해 제안되는 기능 및 유형이 포함되어 있습니다. 이 저장소에는 Microsoft의 GSL 구현이 포함되어 있습니다.
전체 구현은 GSL 디렉토리의 헤더에서 인라인으로 제공됩니다. 구현은 일반적으로 C ++ 14 지원을 구현하는 플랫폼을 가정합니다.
일부 유형은 자체 헤더 (예 : GSL/SPAN)로 분해되었지만 GSL/GSL을 포함하고 전체 라이브러리에 액세스하는 것이 가장 간단합니다.
참고 :이 라이브러리의 유형을 개선하거나 개선하는 기부금과 다른 플랫폼에 대한 포트를 장려합니다. 기여에 대한 자세한 내용은 Contributing.md를 참조하십시오.
이 프로젝트는 Microsoft 오픈 소스 행동 강령을 채택했습니다. 자세한 내용은 추가 질문이나 의견이 있으면 행동 강령 FAQ 또는 [email protected]에 문의하십시오.
이 프로젝트는 Google 테스트 테스트 라이브러리를 사용합니다. Google 테스트 라이센스에 대한 자세한 내용은 ThirdPartynotices.txt 파일을 참조하십시오.
특징 | 지원? | 설명 |
---|---|---|
1.보기 | ||
소유자 | ☑ | 원시 포인터의 별칭 |
not_null | ☑ | 포인터/스마트 포인터를 제한하여 널 값이 아닌 값을 유지합니다 |
기간 | ☑ | 인접한 메모리 시퀀스에 대한보기. 표준화 된 버전의 std::span 기반으로하지만 gsl::span 경계 점검을 시행합니다. |
span_p | ☐ | 포인터부터 술어가 참이되는 첫 번째 장소에 이르기 시작하는 범위에 걸쳐 있습니다. |
BASIC_ZSTRING | ☑ | 템플릿 숯 유형이있는 C- 스트링 (제로 종결 배열)에 대한 포인터 |
zstring | ☑ | 역동적 인 범위와 숯 유형의 char 으로 basic_zstring 에 대한 별칭 |
czstring | ☑ | 역동적 인 범위와 const char 의 숯 유형을 가진 basic_zstring 에 대한 별칭 |
wzstring | ☑ | 동적 범위와 wchar_t 유형으로 basic_zstring 에 대한 별칭 |
cwzstring | ☑ | 동적 범위와 char 유형의 const wchar_t 가진 basic_zstring 에 대한 별칭 |
u16zstring | ☑ | 동적 범위와 char 유형의 char16_t 가진 basic_zstring 에 대한 별칭 |
cu16zstring | ☑ | 동적 범위와 char 유형의 const char16_t 가진 basic_zstring 에 대한 별칭 |
u32zstring | ☑ | 동적 범위와 char 유형의 char32_t 가진 basic_zstring 에 대한 별칭 |
cu32zstring | ☑ | 동적 범위와 char 유형의 const char32_t 가진 basic_zstring 에 대한 별칭 |
2. 소유자 | ||
고유 _ptr | ☑ | std::unique_ptr 에 대한 별칭 |
shared_ptr | ☑ | std::shared_ptr 에 대한 별칭 |
stack_array | ☐ | 스택 할당 배열 |
dyn_array | ☐ | 힙합 배열 |
3. 주장 | ||
기대합니다 | ☑ | 전제 조건 주장; 실패시 종료됩니다 |
보장합니다 | ☑ | 결제 후 주장; 실패시 종료됩니다 |
4. 유틸리티 | ||
Move_owner | ☐ | 한 owner 다른 소유자로 이동시키는 도우미 기능 |
바이트 | ☑ | std::byte 또는 바이트 유형에 대한 별칭입니다 |
Final_Action | ☑ | 파괴에 대한 기능자를 불러 일으키는 Raii 스타일 클래스 |
마지막으로 | ☑ | 헬퍼 함수는 Final_action을 인스턴스화합니다 |
gsl_suppress | ☑ | 논쟁을 취하고 그것을 [[gsl::suppress(x)]] 또는 [[gsl::suppress("x")]] 로 바꾸는 매크로. |
[[절대적인]] | ☐ | 단일 연계 제작자를 입력하여 명시 적으로 그들을 비유하지 않게 만드는 "마커" |
색인 | ☑ | 모든 컨테이너 및 배열 인덱싱에 사용할 유형 (현재 std::ptrdiff_t 의 별칭) |
joining_thread | ☐ | 조인 된 std::thread 의 Raii 스타일 버전 |
좁은 | ☑ | narrow_cast 버전; 좁아 링 _error를 던질 수 있습니다 |
좁은 _cast | ☑ | 값에 대한 좁은 캐스트와 static_cast 와 동의어 |
좁은 _error | ☑ | 좁아진 사용자 정의 예외 유형 |
5. 개념 | ☐ |
특징 | 지원? | 설명 |
---|---|---|
strict_not_null | ☑ | 명백한 생성자가있는 Not_null의 엄격한 버전 |
multi_span | ☐ | 더 이상 사용되지 않았습니다. 다차원 범위. |
strided_span | ☐ | 더 이상 사용되지 않았습니다. 이 유형에 대한 지원이 중단되었습니다. |
BASIC_STRING_SPAN | ☐ | 더 이상 사용되지 않았습니다. span 처럼 템플릿 숯 유형이있는 문자열 용 |
String_span | ☐ | 더 이상 사용되지 않았습니다. 숯 유형의 char 있는 basic_string_span 의 별칭 |
cstring_span | ☐ | 더 이상 사용되지 않았습니다. const char 의 숯 유형이있는 basic_string_span 의 별칭 |
WSTRING_SPAN | ☐ | 더 이상 사용되지 않았습니다. char wchar_t 의 char char_t를 가진 basic_string_span 의 별칭 |
cwstring_span | ☐ | 더 이상 사용되지 않았습니다. const wchar_t 의 숯 유형과 함께 basic_string_span 과 별칭 |
u16string_span | ☐ | 더 이상 사용되지 않았습니다. char 유형의 char16_t 와 함께 basic_string_span 에 별명 |
cu16string_span | ☐ | 더 이상 사용되지 않았습니다. const char16_t 의 char 유형이있는 alias basic_string_span |
u32string_span | ☐ | 더 이상 사용되지 않았습니다. char32_t 의 char 유형으로 basic_string_span 에 별명 |
cu32string_span | ☐ | 더 이상 사용되지 않았습니다. const char32_t 의 char 유형이있는 basic_string_span 의 별칭 |
이는 CPPCoreGuidelines 준 지정을 기반으로합니다.
GSL은 공식적으로 MSVC 및 LLVM, GCC, Clang 및 Apple-Clang을 사용하여 최근의 주요 버전의 Visual Studio를 지원합니다. 이러한 주요 버전에 대해 GSL은 공식적으로 C ++ 14, C ++ 17, C ++ 20 및 C ++ 23 (컴파일러에서 지원할 때)을 지원합니다. 아래는 현재 테스트중인 버전을 보여주는 테이블입니다 ([.github/Workflows/Compilers.yml] (워크 플로) 참조).
컴파일러 | 툴셋 버전은 현재 테스트되었습니다 |
---|---|
GCC | 10, 11, 12 |
Xcode | 14.3.1, 15.4 |
그 소리 | 13, 14, 15 |
MSVC와 비주얼 스튜디오 | VS2019, VS2022 |
LLVM의 비주얼 스튜디오 | VS2019, VS2022 |
GSL을 성공적으로 다른 플랫폼으로 포트하면 귀하의 의견을 듣고 싶습니다!
목표 | CI/CD 상태 |
---|---|
iOS | |
기계적 인조 인간 |
참고 :이 CI/CD 단계는 각 풀 요청마다 실행되지만 실패는 차단되지 않습니다.
테스트를 구축하려면 다음이 필요합니다.
이 단계는이 저장소의 소스 코드가 c:GSL
이라는 디렉토리로 복제되었다고 가정합니다.
특정 아키텍처에 대한 빌드 출력을 포함하는 디렉토리를 만듭니다 (이 예에서는 c:GSLbuild-x86
지정합니다).
cd GSL
md build-x86
cd build-x86
CMAKE를 구성하여 원하는 컴파일러를 사용하도록 구성하십시오 ( cmake --help
실행하여 목록을 볼 수 있음).
cmake -G "Visual Studio 15 2017" c:GSL
테스트 스위트를 구축하십시오 (이 경우 디버그 구성에서 릴리스는 또 다른 좋은 선택입니다).
cmake --build . --config Debug
테스트 스위트를 실행하십시오.
ctest -C Debug
모든 테스트가 통과해야합니다. 플랫폼이 완전히 지원되었으며 GSL 유형을 사용할 준비가되었습니다!
VCPKG 종속성 관리자를 사용하여 GSL을 다운로드하여 설치할 수 있습니다.
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
vcpkg install ms-gsl
VCPKG의 GSL 포트는 Microsoft 팀원 및 커뮤니티 기고자가 최신 상태로 유지됩니다. 버전이 오래된 경우 VCPKG 저장소에서 문제를 만들거나 요청을 가져 오십시오.
유형은 헤더에서 전적으로 인라인으로 구현되므로 링크 요구 사항이 없습니다.
GSL 디렉토리를 소스 트리에 복사하여 컴파일러에서 사용할 수있게 한 다음 프로그램에 적절한 헤더를 포함시킬 수 있습니다.
또는 GSL 개발 폴더 (위의 예에 c:GSLinclude
) 또는 설치 폴더 (설치 후)를 가리 키도록 컴파일러 포함 경로 플래그를 설정하십시오. 예를 들어.
MSVC ++
/I c:GSLinclude
GCC/Clang
-I$HOME/dev/GSL/include
다음을 사용하여 라이브러리 포함 :
#include <gsl/gsl>
라이브러리는 CMAKE 용 구성 파일을 제공하며 일단 설치되면 find_package
통해 찾을 수 있습니다.
성공하면 Microsoft.GSL::GSL
target_link_libraries
라이브러리 대상을 추가합니다.
find_package (Microsoft.GSL CONFIG REQUIRED )
target_link_libraries (foobar PRIVATE Microsoft.GSL::GSL)
Cmake 버전 3.11+를 사용하는 경우 공식 FetchContent 모듈을 사용할 수 있습니다. 이를 통해 GSL을 프로젝트에 쉽게 통합 할 수 있습니다.
# 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)
Visual Studio 사용자의 경우 기본적으로 제공되는 것보다 Visual Studio Debugger에서 GSL 유형을보다 유용한 시각화하려면 리포지토리의 루트 디렉토리의 GSL.NATVIS 파일을 프로젝트에 추가 할 수 있습니다.
응용 데이터 관리 및 시스템 연구의 Microsoft Grey Systems Lab (GSL)에 대한 정보는 https://aka.ms/gsl을 참조하십시오.