Руководящие принципы поддержки библиотеки (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.