Pedoman Dukungan Pustaka (GSL) berisi fungsi dan jenis yang disarankan untuk digunakan oleh pedoman inti C ++ yang dikelola oleh fondasi C ++ standar. Repo ini berisi implementasi GSL Microsoft.
Seluruh implementasi disediakan inline di header di bawah direktori GSL. Implementasi umumnya mengasumsikan platform yang mengimplementasikan dukungan C ++ 14.
Sementara beberapa jenis telah dipecah menjadi header mereka sendiri (misalnya GSL/Span), paling sederhana hanya memasukkan GSL/GSL dan mendapatkan akses ke seluruh perpustakaan.
Catatan: Kami mendorong kontribusi yang meningkatkan atau memperbaiki jenis apa pun di perpustakaan ini serta port ke platform lain. Silakan lihat Contributing.MD untuk informasi lebih lanjut tentang Kontribusi.
Proyek ini telah mengadopsi kode perilaku open source Microsoft. Untuk informasi lebih lanjut, lihat FAQ Kode Perilaku atau hubungi [email protected] dengan pertanyaan atau komentar tambahan.
Proyek ini memanfaatkan perpustakaan pengujian google tes. Silakan lihat file ThirdPartynotices.txt untuk detail tentang lisensi Google Test.
Fitur | Didukung? | Keterangan |
---|---|---|
1. Tampilan | ||
pemilik | ☑ | Alias untuk penunjuk mentah |
not_null | ☑ | Membatasi pointer/pointer pintar untuk menahan nilai non-nol |
menjangkau | ☑ | Tampilan tentang urutan memori yang berdekatan. Berdasarkan versi standar std::span , namun gsl::span menegakkan batasan batas. |
span_p | ☐ | Mencakup kisaran mulai dari pointer ke tempat pertama yang predikatnya benar |
BASIC_ZSTRING | ☑ | Pointer ke C-string (array yang diakhiri nol) dengan jenis char yang templated |
zstring | ☑ | Alias ke basic_zstring dengan tingkat dinamis dan jenis char char |
czstring | ☑ | Alias ke basic_zstring dengan tingkat dinamis dan jenis arang const char |
wzstring | ☑ | Alias ke basic_zstring dengan tingkat dinamis dan jenis char dari wchar_t |
cwzstring | ☑ | Alias ke basic_zstring dengan tingkat dinamis dan jenis char dari const wchar_t |
u16zstring | ☑ | Alias ke basic_zstring dengan tingkat dinamis dan jenis char char16_t |
Cu16zstring | ☑ | Alias ke basic_zstring dengan tingkat dinamis dan jenis char dari const char16_t |
u32zstring | ☑ | Alias ke basic_zstring dengan tingkat dinamis dan jenis char char32_t |
CU32ZString | ☑ | Alias ke basic_zstring dengan tingkat dinamis dan jenis char dari const char32_t |
2. Pemilik | ||
unik_ptr | ☑ | Alias ke std::unique_ptr |
shared_ptr | ☑ | Alias ke std::shared_ptr |
Stack_array | ☐ | Array yang dialokasikan dengan tumpukan |
dyn_array | ☐ | Array yang dialokasikan heap |
3. Penegasan | ||
Mengharapkan | ☑ | Pernyataan prasyarat; Kegagalan itu berakhir |
Memastikan | ☑ | Pernyataan postcondition; Kegagalan itu berakhir |
4. Utilitas | ||
move_owner | ☐ | Fungsi pembantu yang memindahkan satu owner ke yang lain |
byte | ☑ | Entah alias ke std::byte atau tipe byte |
final_action | ☑ | Kelas gaya raii yang memohon fungsi untuk kehancurannya |
Akhirnya | ☑ | Fungsi pembantu instantiating final_action |
GSL_Suppress | ☑ | Makro yang mengambil argumen dan mengubahnya menjadi [[gsl::suppress(x)]] atau [[gsl::suppress("x")]] |
[[implisit]] | ☐ | "Penanda" untuk mengenakan konstruktor argumen tunggal untuk secara eksplisit menjadikannya tidak eksplisit |
indeks | ☑ | Jenis yang akan digunakan untuk semua wadah dan pengindeksan array (saat ini alias untuk std::ptrdiff_t ) |
gabungan_thread | ☐ | Versi gaya std::thread yang bergabung |
sempit | ☑ | Versi narrow_cast yang diperiksa; itu bisa melempar narrowing_error |
sempit_cast | ☑ | Pemeran yang menyempit untuk nilai dan sinonim untuk static_cast |
Suprowing_error | ☑ | Tipe pengecualian khusus yang dilemparkan oleh sempit |
5. Konsep | ☐ |
Fitur | Didukung? | Keterangan |
---|---|---|
strict_not_null | ☑ | Versi not_null yang lebih ketat dengan konstruktor eksplisit |
multi_span | ☐ | Tercerahkan. Rentang multi-dimensi. |
strided_span | ☐ | Tercerahkan. Dukungan untuk jenis ini telah dihentikan. |
BASIC_STRING_SPAN | ☐ | Tercerahkan. Seperti span tetapi untuk string dengan jenis char templated |
string_span | ☐ | Tercerahkan. Alias ke basic_string_span dengan jenis char char |
cstring_span | ☐ | Tercerahkan. Alias ke basic_string_span dengan jenis arang const char |
wstring_span | ☐ | Tercerahkan. A alias ke basic_string_span dengan tipe char wchar_t |
cwstring_span | ☐ | Tercerahkan. Alias ke basic_string_span dengan tipe char dari const wchar_t |
u16string_span | ☐ | Tercerahkan. Alias ke basic_string_span dengan jenis char char16_t |
cu16string_span | ☐ | Tercerahkan. Alias ke basic_string_span dengan jenis char dari const char16_t |
u32string_span | ☐ | Tercerahkan. Alias ke basic_string_span dengan jenis char char32_t |
CU32STRING_SPAN | ☐ | Tercerahkan. Alias ke basic_string_span dengan jenis arang const char32_t |
Ini didasarkan pada semi-spesifikasi CPPCoreGuidelines.
GSL secara resmi mendukung versi utama Visual Studio baru-baru ini dengan MSVC dan LLVM, GCC, Clang, dan Xcode dengan Apple-Clang. Untuk masing -masing versi utama ini, GSL secara resmi mendukung C ++ 14, C ++ 17, C ++ 20, dan C ++ 23 (ketika didukung oleh kompiler). Di bawah ini adalah tabel yang menunjukkan versi yang saat ini sedang diuji (juga lihat [.github/workflows/compiler.yml] (alur kerja).)
Penyusun | Versi toolset saat ini diuji |
---|---|
GCC | 10, 11, 12 |
Xcode | 14.3.1, 15.4 |
Dentang | 13, 14, 15 |
Studio Visual dengan MSVC | VS2019, VS2022 |
Studio Visual dengan LLVM | VS2019, VS2022 |
Jika Anda berhasil port GSL ke platform lain, kami akan senang mendengar dari Anda!
Target | Status CI/CD |
---|---|
iOS | |
Android |
Catatan: Langkah-langkah CI/CD ini dijalankan dengan setiap permintaan tarik, namun kegagalan di dalamnya tidak memblokir.
Untuk membangun tes, Anda akan membutuhkan yang berikut:
Langkah -langkah ini mengasumsikan kode sumber repositori ini telah dikloning ke dalam direktori bernama c:GSL
.
Buat direktori untuk berisi output build untuk arsitektur tertentu (kami beri nama c:GSLbuild-x86
dalam contoh ini).
cd GSL
md build-x86
cd build-x86
Konfigurasikan cmake untuk menggunakan kompiler pilihan Anda (Anda dapat melihat daftar dengan menjalankan cmake --help
).
cmake -G "Visual Studio 15 2017" c:GSL
Bangun test suite (dalam hal ini, dalam konfigurasi debug, rilis adalah pilihan lain yang baik).
cmake --build . --config Debug
Jalankan test suite.
ctest -C Debug
Semua tes harus lulus - menunjukkan platform Anda didukung sepenuhnya dan Anda siap menggunakan tipe GSL!
Anda dapat mengunduh dan menginstal GSL menggunakan manajer ketergantungan VCPKG:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
vcpkg install ms-gsl
Port GSL di VCPKG selalu up to date oleh anggota tim Microsoft dan kontributor komunitas. Jika versi sudah ketinggalan zaman, silakan buat masalah atau tarik permintaan pada repositori VCPKG.
Karena jenisnya sepenuhnya diimplementasikan inline di header, tidak ada persyaratan yang menghubungkan.
Anda dapat menyalin direktori GSL ke pohon sumber Anda sehingga tersedia untuk kompiler Anda, lalu sertakan header yang sesuai dalam program Anda.
Sebagai alternatif, atur bendera jalur kompiler Anda untuk menunjuk ke folder pengembangan GSL ( c:GSLinclude
dalam contoh di atas) atau folder instalasi (setelah menjalankan instalasi). Misalnya.
MSVC ++
/I c:GSLinclude
Gcc/dentang
-I$HOME/dev/GSL/include
Sertakan perpustakaan menggunakan:
#include <gsl/gsl>
Perpustakaan menyediakan file konfigurasi untuk cmake, setelah diinstal dapat ditemukan melalui find_package
.
Yang, bila berhasil, akan menambahkan target perpustakaan yang disebut Microsoft.GSL::GSL
yang dapat Anda gunakan melalui mekanisme target_link_libraries
yang biasa.
find_package (Microsoft.GSL CONFIG REQUIRED )
target_link_libraries (foobar PRIVATE Microsoft.GSL::GSL)
Jika Anda menggunakan CMake Versi 3.11+, Anda dapat menggunakan modul FetchContent resmi. Ini memungkinkan Anda untuk dengan mudah memasukkan GSL ke dalam proyek Anda.
# 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)
Untuk pengguna Visual Studio, file GSL.NATVIS di direktori root repositori dapat ditambahkan ke proyek Anda jika Anda ingin visualisasi tipe GSL yang lebih bermanfaat dalam debugger Visual Studio daripada yang akan ditawarkan secara default.
Untuk informasi tentang Lab Microsoft Grey Systems (GSL) dari manajemen data terapan dan penelitian sistem lihat https://aka.ms/gsl.