แนวทางการสนับสนุนไลบรารี (GSL) มีฟังก์ชั่นและประเภทที่แนะนำสำหรับการใช้งานโดยแนวทางหลักของ C ++ Core ที่ดูแลโดยมูลนิธิ C ++ มาตรฐาน repo นี้มีการใช้งาน GSL ของ Microsoft
การใช้งานทั้งหมดมีให้แบบอินไลน์ในส่วนหัวภายใต้ไดเรกทอรี GSL การใช้งานโดยทั่วไปถือว่าเป็นแพลตฟอร์มที่ใช้การสนับสนุน C ++ 14
ในขณะที่บางประเภทถูกแบ่งออกเป็นส่วนหัวของตัวเอง (เช่น GSL/Span) มันง่ายที่สุดที่จะรวม GSL/GSL และเข้าถึงห้องสมุดทั้งหมด
หมายเหตุ: เราสนับสนุนการมีส่วนร่วมที่ปรับปรุงหรือปรับแต่งประเภทใด ๆ ในห้องสมุดนี้รวมถึงพอร์ตไปยังแพลตฟอร์มอื่น ๆ โปรดดูข้อมูลเพิ่มเติมสำหรับข้อมูลเพิ่มเติมเกี่ยวกับการมีส่วนร่วม
โครงการนี้ได้นำรหัสการดำเนินงานของ Microsoft โอเพ่นซอร์สมาใช้ สำหรับข้อมูลเพิ่มเติมโปรดดูจรรยาบรรณคำถามที่พบบ่อยหรือติดต่อ [email protected] พร้อมคำถามหรือความคิดเห็นเพิ่มเติมใด ๆ
โครงการนี้ใช้ประโยชน์จากไลบรารีทดสอบ Google Test โปรดดูไฟล์ thirdpartynot.txt สำหรับรายละเอียดเกี่ยวกับการออกใบอนุญาตของการทดสอบของ Google
คุณสมบัติ | รองรับ? | คำอธิบาย |
---|---|---|
1. มุมมอง | ||
เจ้าของ | นามแฝงสำหรับตัวชี้ดิบ | |
not_null | จำกัด ตัวชี้/ตัวชี้อัจฉริยะเพื่อเก็บค่าที่ไม่ใช่ค่า NULL | |
ช่วง | มุมมองเกี่ยวกับลำดับหน่วยความจำที่ต่อเนื่องกัน ขึ้นอยู่กับรุ่นมาตรฐานของ std::span อย่างไรก็ตาม gsl::span บังคับใช้การตรวจสอบขอบเขต | |
Span_p | ช่วงช่วงเริ่มต้นจากตัวชี้ไปยังสถานที่แรกที่ภาคแสดงเป็นจริง | |
masic_zstring | ตัวชี้ไปยัง C-string (อาร์เรย์ที่ไม่มีการยกเลิกศูนย์) ที่มีประเภทถ่านแบบ templated | |
zstring | นามแฝงของ basic_zstring ที่มีขอบเขตแบบไดนามิกและ char ชนิดถ่าน | |
CZSTRING | นามแฝงของ basic_zstring ที่มีขอบเขตแบบไดนามิกและประเภท const char | |
WZSTRING | นามแฝงไปยัง basic_zstring ที่มีขอบเขตแบบไดนามิกและประเภทถ่านของ wchar_t | |
cwzstring | นามแฝงไปยัง basic_zstring ที่มีขอบเขตแบบไดนามิกและประเภทถ่านของ const wchar_t | |
u16zstring | char16_t basic_zstring | |
Cu16zstring | นามแฝงของ basic_zstring ที่มีขอบเขตแบบไดนามิกและประเภทถ่านของ const char16_t | |
u32zstring | นามแฝงของ basic_zstring ที่มีขอบเขตแบบไดนามิกและประเภทถ่านของ char32_t | |
Cu32zstring | นามแฝงของ basic_zstring ที่มีขอบเขตแบบไดนามิกและประเภทถ่านของ const char32_t | |
2. เจ้าของ | ||
ไม่ซ้ำกัน _ptr | นามแฝงของ std::unique_ptr | |
shared_ptr | นามแฝงของ std::shared_ptr | |
stack_array | อาร์เรย์ที่จัดสรรสแต็ก | |
DYN_ARRAY | อาร์เรย์ที่รวบรวมไว้ | |
3. การยืนยัน | ||
คาดหวัง | การยืนยันเงื่อนไขเบื้องต้น; ในความล้มเหลวจะสิ้นสุดลง | |
รับรอง | การยืนยัน postcondition; ในความล้มเหลวจะสิ้นสุดลง | |
4. สาธารณูปโภค | ||
move_owner | ฟังก์ชั่นผู้ช่วยที่ย้าย owner หนึ่งไปยังอีกคนหนึ่ง | |
ไบต์ | อาจเป็นนามแฝงถึง std::byte หรือประเภทไบต์ | |
final_action | คลาสสไตล์ Raii ที่เรียกใช้ functor เกี่ยวกับการทำลายล้าง | |
ในที่สุด | ฟังก์ชั่นผู้ช่วยอินสแตนซ์ final_action | |
gsl_suppress | แมโครที่มีการโต้แย้งและเปลี่ยนเป็น [[gsl::suppress(x)]] หรือ [[gsl::suppress("x")]] | |
[[โดยปริยาย]] | "เครื่องหมาย" ที่จะวางบนตัวสร้างการโต้แย้งเดียวเพื่อให้พวกเขาไม่ชัดเจนอย่างชัดเจน | |
ดัชนี | ประเภทที่ใช้สำหรับการจัดทำดัชนีคอนเทนเนอร์และอาร์เรย์ทั้งหมด (ปัจจุบันเป็นนามแฝงสำหรับ std::ptrdiff_t ) | |
เข้าร่วม _Thread | รูปแบบสไตล์ raii ของ std::thread ที่เข้าร่วม | |
แคบ | เวอร์ชันที่ตรวจสอบของ narrow_cast ; มันสามารถโยน narrowing_error | |
แคบ _cast | แคบลงสำหรับค่าและคำพ้องความหมายสำหรับ static_cast | |
Narrowing_error | ประเภทข้อยกเว้นที่กำหนดเองถูกโยนโดยแคบ | |
5. แนวคิด |
คุณสมบัติ | รองรับ? | คำอธิบาย |
---|---|---|
เข้มงวด _not_null | เวอร์ชันที่เข้มงวดยิ่งขึ้นของ NOT_NULL ที่มีตัวสร้างที่ชัดเจน | |
multi_span | เลิกใช้แล้ว ช่วงหลายมิติ | |
Strided_span | เลิกใช้แล้ว การสนับสนุนสำหรับประเภทนี้ถูกยกเลิก | |
masic_string_span | เลิกใช้แล้ว ชอบ span แต่สำหรับสตริงที่มีประเภทถ่านแบบ templated | |
String_span | เลิกใช้แล้ว นามแฝงไปยัง basic_string_span ที่มีถ่านชนิดของ char | |
cstring_span | เลิกใช้แล้ว นามแฝงไปยัง basic_string_span ที่มีถ่านชนิด const char | |
wstring_span | เลิกใช้แล้ว นามแฝงไปยัง basic_string_span ที่มีประเภทถ่านของ wchar_t | |
cwstring_span | เลิกใช้แล้ว นามแฝงไปยัง basic_string_span ที่มีประเภทถ่านของ const wchar_t | |
u16string_span | เลิกใช้แล้ว นามแฝงไปยัง basic_string_span ที่มีประเภทถ่านของ char16_t | |
cu16string_span | เลิกใช้แล้ว นามแฝงไปยัง basic_string_span ที่มีประเภทถ่านของ const char16_t | |
u32string_span | เลิกใช้แล้ว นามแฝงไปยัง basic_string_span ที่มีประเภทถ่านของ char32_t | |
cu32string_span | เลิกใช้แล้ว นามแฝงไปยัง basic_string_span ที่มีประเภทถ่านของ 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 |
Visual Studio พร้อม 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 Perdency 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 ใน DEBUGGER Visual Studio มากกว่าที่จะเสนอโดยค่าเริ่มต้น
สำหรับข้อมูลเกี่ยวกับ Microsoft Grey Systems Lab (GSL) ของการจัดการข้อมูลประยุกต์และการวิจัยระบบดู https://aka.ms/gsl