指南支持库(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。