ガイドラインサポートライブラリ(GSL)には、標準のC ++財団が維持しているC ++コアガイドラインで使用することが提案されている関数とタイプが含まれています。このレポは、MicrosoftのGSLの実装が含まれています。
実装全体は、GSLディレクトリの下のヘッダーにインラインで提供されます。実装は通常、C ++ 14のサポートを実装するプラットフォームを想定しています。
一部のタイプは独自のヘッダー(GSL/SPANなど)に分割されていますが、GSL/GSLを含めてライブラリ全体にアクセスすることは最も簡単です。
注:このライブラリのタイプを改善または改善する貢献と、他のプラットフォームへのポートを奨励することをお勧めします。寄付の詳細については、Converting.mdを参照してください。
このプロジェクトは、Microsoftのオープンソース行動規範を採用しています。詳細については、FAQのコードを参照するか、追加の質問やコメントについては[email protected]にお問い合わせください。
このプロジェクトは、Googleテストテストライブラリを利用しています。 Googleテストのライセンスに関する詳細については、ThirdPartynotices.txtファイルを参照してください。
| 特徴 | サポートされていますか? | 説明 |
|---|---|---|
| 1。ビュー | ||
| 所有者 | ☑ | 生のポインターのエイリアス |
| not_null | ☑ | ポインター/スマートポインターを制限して、非ヌル値を保持します |
| スパン | ☑ | 一連のメモリのシーケンスに対するビュー。 std::spanの標準化されたバージョンに基づいていますが、 gsl::spanバウンドチェックを強制します。 |
| span_p | ☐ | ポインターから、述語が真である最初の場所までの範囲にまたがります |
| BASIC_ZSTRING | ☑ | テンプレートされたcharタイプを備えたcストリング(ゼロターミネート配列)へのポインター |
| zString | ☑ | 動的な範囲でbasic_zstringのエイリアスとcharタイプのchar |
| czstring | ☑ | 動的な範囲でbasic_zstringのエイリアスとconst charのcharタイプ |
| wzstring | ☑ | 動的な範囲とcharタイプのwchar_t basic_zstringのエイリアス |
| cwzstring | ☑ | 動的な範囲とconst wchar_tのcharタイプのbasic_zstringのエイリアス |
| U16ZSTRING | ☑ | 動的な範囲とchar16_tのcharタイプのbasic_zstringのエイリアス |
| CU16ZSTRING | ☑ | 動的な範囲とconst char16_tのcharタイプのbasic_zstringのエイリアス |
| U32ZSTRING | ☑ | 動的な範囲とchar32_tのcharタイプのbasic_zstringのエイリアス |
| CU32ZSTRING | ☑ | 動的な範囲とconst char32_tのcharタイプのbasic_zstringのエイリアス |
| 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 | ☐ | 結合するstd::threadのRAIIスタイルバージョン |
| 狭い | ☑ | narrow_castのチェックバージョン。 warnowing_errorを投げることができます |
| large_cast | ☑ | 値の狭窄キャストとstatic_castの同義語 |
| warowing_error | ☑ | ナローによってスローされるカスタム例外タイプ |
| 5。概念 | ☐ |
| 特徴 | サポートされていますか? | 説明 |
|---|---|---|
| strict_not_null | ☑ | 明示的なコンストラクターを備えたnot_nullのより厳しいバージョン |
| multi_span | ☐ | 非推奨。多次元スパン。 |
| strided_span | ☐ | 非推奨。このタイプのサポートは廃止されました。 |
| BASIC_STRING_SPAN | ☐ | 非推奨。 spanのようですが、テンプレートされたチャータイプの文字列の場合 |
| string_span | ☐ | 非推奨。 charタイプのcharを使用したbasic_string_spanのエイリアス |
| cstring_span | ☐ | 非推奨。 const charのcharタイプのbasic_string_spanのエイリアス |
| wstring_span | ☐ | 非推奨。 charタイプのwchar_tを使用したbasic_string_spanのエイリアス |
| cwstring_span | ☐ | 非推奨。 const wchar_tのcharタイプを持つbasic_string_spanのエイリアス |
| u16string_span | ☐ | 非推奨。 char16_tのcharタイプを持つbasic_string_spanのエイリアス |
| cu16string_span | ☐ | 非推奨。 const char16_tのcharタイプを持つ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でXcodeの両方で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
テストスイートを構築します(この場合、デバッグ構成では、リリースももう1つの選択肢です)。
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ユーザーの場合、リポジトリのルートディレクトリにあるファイルGSL.NATVISをプロジェクトに追加できます。デフォルトで提供されるよりもVisual StudioデバッガーのGSLタイプのより役立つ視覚化を希望する場合は、プロジェクトに追加できます。
Applied Data Managementおよびシステム調査のMicrosoft Gray Systems Lab(GSL)の詳細については、https://aka.ms/gslを参照してください。