指南支持庫(GSL)包含由標準C ++基礎維護的C ++核心指南建議使用的功能和類型。該倉庫包含Microsoft的GSL實現。
整個實現都是在GSL目錄下的標題中向內的。實施通常假定一個實現C ++ 14支持的平台。
儘管某些類型已分解為自己的標題(例如GSL/SPAN),但最簡單的是包括GSL/GSL並獲得對整個庫的訪問。
注意:我們鼓勵貢獻改善或完善該庫中的任何類型,以及端口到其他平台。有關貢獻的更多信息,請參見貢獻。
該項目採用了Microsoft開源的行為代碼。有關更多信息,請參見《行為守則常見問題守則》或與其他問題或評論聯繫[email protected]。
該項目利用Google測試庫。有關Google測試許可的詳細信息,請參閱第三派對詞。txt文件。
特徵 | 支持? | 描述 |
---|---|---|
1。視圖 | ||
所有者 | ☑ | 原始指針的別名 |
NOT_NULL | ☑ | 限制指針/智能指針以保持非零值 |
跨度 | ☑ | 在連續的內存序列上的視圖。基於std::span 的標準化版本,但是gsl::span 執行了界限檢查。 |
SPAN_P | ☐ | 跨越從指針到謂詞為真的第一位的範圍 |
basic_zstring | ☑ | 具有模板炭類型的C弦(零終止陣列)的指針 |
ZSTRING | ☑ | 動態範圍和一種char類型的char 的basic_zstring 的別名 |
CZSTRING | ☑ | 具有動態範圍的basic_zstring 的別名和一種CHAR類型的const char |
wzstring | ☑ | 具有動態範圍的basic_zstring 的別名和一種wchar_t 的char類型 |
CWZSTRING | ☑ | 具有動態範圍的basic_zstring 的別名和一種char const wchar_t 的字符類型 |
U16ZSTRING | ☑ | 具有動態範圍的basic_zstring 的別名和一種char類型的char16_t |
Cu16zstring | ☑ | 具有動態範圍的basic_zstring 的別名和const char16_t 的char類型 |
U32ZSTRING | ☑ | 具有動態範圍的basic_zstring 的別名和一種char32_t 的char類型 |
CU32ZSTRING | ☑ | 動態範圍的basic_zstring 的別名和const char32_t 的char類型 |
2。所有者 | ||
unique_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 | ☐ | raii樣式的std::thread |
狹窄的 | ☑ | narrow_cast 的檢查版本;它可以拋出narroving_error |
nrarch_cast | ☑ | 值的縮小鑄件,用於static_cast 值和同義詞 |
narring_error | ☑ | 狹窄拋出的自定義異常類型 |
5。概念 | ☐ |
特徵 | 支持? | 描述 |
---|---|---|
strict_not_null | ☑ | 具有顯式構造函數的not_null的更嚴格的版本 |
MULTI_SPAN | ☐ | 棄用。多維跨度。 |
Strided_span | ☐ | 棄用。對這種類型的支持已停產。 |
basic_string_span | ☐ | 棄用。喜歡span ,但對於具有模板炭類型的字符串 |
String_span | ☐ | 棄用。與Char類型的char 類型的basic_string_span 的別名 |
CSTRING_SPAN | ☐ | 棄用。與char類型的const char 類型的basic_string_span 的別名 |
WSTRING_SPAN | ☐ | 棄用。 basic_string_span 的別名wchar_t 的char_t類型 |
cwstring_span | ☐ | 棄用。與char const wchar_t 類型的basic_string_span 的別名 |
U16STRING_SPAN | ☐ | 棄用。與char類型的char16_t 類型的basic_string_span 的別名 |
Cu16String_span | ☐ | 棄用。與CHAR類型的const char16_t 的basic_string_span 的別名 |
U32STRING_SPAN | ☐ | 棄用。與char32_t 的char類型的basic_string_span 的別名 |
Cu32String_span | ☐ | 棄用。與CHAR類型的const char32_t 的basic_string_span 的別名 |
這是基於cppcoreguidelines半規範化的。
GSL通過MSVC和LLVM,GCC,Clang和Xcode和Apple-Clang正式支持Visual Studio的最新主要版本。對於這些主要版本,GSL正式支持C ++ 14,C ++ 17,C ++ 20和C ++ 23(在編譯器支持時)。下面是一張表,顯示當前正在測試的版本(另請參見[.Github/Workflows/Compilers.yml](工作流)。
編譯器 | 目前已測試的工具集版本 |
---|---|
海灣合作委員會 | 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
Microsoft團隊成員和社區貢獻者保持最新的VCPKG GSL端口。如果該版本已過時,請在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+,則可以使用官方的提取符號模塊。這使您可以輕鬆地將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調試器中對GSL類型的可視化更多的可視化,則可以將存儲庫根目錄中的文件GSL.NATVIS添加到您的項目中。
有關應用數據管理和系統研究的Microsoft Gray Systems Lab(GSL)的信息,請參見https://aka.ms/gsl。