Руководящие принципы поддержки библиотеки (GSL) содержат функции и типы, которые предлагаются для использования в соответствии с руководящими принципами C ++ Core, поддерживаемыми стандартной основой C ++. Этот репо содержит реализацию Microsoft GSL.
Вся реализация предоставлена в строке в заголовках в каталоге GSL. Реализация обычно предполагает платформу, которая реализует поддержку C ++ 14.
Хотя некоторые типы были разбиты на их собственные заголовки (например, GSL/SPAN), проще всего включить GSL/GSL и получить доступ ко всей библиотеке.
Примечание. Мы поощряем вклад, которые улучшают или совершенствуют любые типы в этой библиотеке, а также порты на другие платформы. Пожалуйста, смотрите Anforming.md для получения дополнительной информации о взносе.
Этот проект принял код поведения с открытым исходным кодом Microsoft. Для получения дополнительной информации см. Code of Perving FAQ или свяжитесь с [email protected] с любыми дополнительными вопросами или комментариями.
Этот проект использует библиотеку тестирования Google. Пожалуйста, см. Файл ThirdPartyNotices.txt для получения подробной информации о лицензировании Test Google.
Особенность | Поддерживается? | Описание |
---|---|---|
1. Просмотры | ||
владелец | ☑ | Псевдоним для необработанного указателя |
not_null | ☑ | Ограничивает указатель/интеллектуальный указатель для сохранения не нулевых значений |
охватывать | ☑ | Представление о смежной последовательности памяти. На основе стандартизированной версии std::span , однако gsl::span обеспечивает проверку границ. |
span_p | ☐ | Охватывает диапазон, начиная с указателя на первое место, для которого предикат правда |
basic_zstring | ☑ | Указатель на C-String (массив с нулевым уровнем) с шаблонным типом Char |
Zstring | ☑ | Псевдоним для basic_zstring с динамической степенью и типом char |
Czstring | ☑ | Псевдоним для basic_zstring с динамической степенью и типом char of const char |
WZString | ☑ | Псевдоним для basic_zstring с динамической степенью и типом war_t wchar_t |
CWZString | ☑ | Псевдоним для basic_zstring с динамической степенью и типом char of const wchar_t |
U16ZString | ☑ | Псевдоним для basic_zstring с динамической протяженностью и типом char16_t |
CU16ZString | ☑ | Псевдоним для basic_zstring с динамической протяженностью и типом символа const char16_t |
U32ZString | ☑ | Псевдоним для basic_zstring с динамической протяженностью и типом char32_t |
CU32ZString | ☑ | Псевдоним для basic_zstring с динамической протяженностью и типом Char of const char32_t |
2. Владельцы | ||
уникальный_Птр | ☑ | Псевдоним для 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 ; он может бросить сужение_еррора |
узкий_КАС | ☑ | Сужающий актер для значений и синоним для static_cast |
сужение_еррора | ☑ | Пользовательский тип исключений, брошенный узким |
5. Концепции | ☐ |
Особенность | Поддерживается? | Описание |
---|---|---|
strict_not_null | ☑ | Более строгая версия not_null с явными конструкторами |
multi_span | ☐ | Устарел. Многомерный пролет. |
ronged_span | ☐ | Устарел. Поддержка этого типа была прекращена. |
basic_string_span | ☐ | Устарел. Как span , но для струн с шаблоном типа Char |
string_span | ☐ | Устарел. Псевдоним для basic_string_span с типом Char char |
cstring_span | ☐ | Устарел. Псевдоним для basic_string_span с типом const char char |
wstring_span | ☐ | Устарел. Псевдоним для basic_string_span с типом wchar_t |
cwstring_span | ☐ | Устарел. Псевдоним для basic_string_span с типом CAR const wchar_t |
u16string_span | ☐ | Устарел. Псевдоним для basic_string_span с типом char16_t |
cu16string_span | ☐ | Устарел. Псевдоним для basic_string_span с типом Char const char16_t |
U32String_span | ☐ | Устарел. Псевдоним для basic_string_span с типом char32_t |
cu32string_span | ☐ | Устарел. Псевдоним для basic_string_span с типом Char const char32_t |
Это основано на полу-спецификации CPPCoreGuidelines.
GSL официально поддерживает недавние основные версии Visual Studio с MSVC и LLVM, GCC, Clang и Xcode с Apple-Clang. Для каждой из этих основных версий 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 |
Visual Studio с MSVC | VS2019, VS2022 |
Визуальная студия с LLVM | VS2019, VS2022 |
Если вы успешно перенесете GSL на другую платформу, мы будем рады услышать от вас!
Цель | Статус CI/CD |
---|---|
ios | |
Android |
Примечание. Эти шаги 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!
Вы можете скачать и установить GSL, используя VCPKG Degy Deving Manager:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
vcpkg install ms-gsl
Порт GSL в VCPKG обновляется членами команды 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 файл gsl.natvis в корневом каталоге репозитория может быть добавлен в ваш проект, если вы хотите более полезной визуализации типов GSL в отладчике Visual Studio, чем по умолчанию.
Для получения информации о Microsoft Grey Systems Lab (GSL) управления прикладными данными и системы системы см. Https://aka.ms/gsl.