การกำหนด Concepts ด้วย requires
กำหนด concepts แบบกำหนดเองด้วยนิพจน์ requires และข้อจำกัด
การกำหนด Concepts ด้วย requires เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
คีย์เวิร์ด concept
ประกาศแนวคิดด้วย template <params> concept Name = expression; นิพจน์ต้องเป็นค่าบูลีนขณะคอมไพล์
template <typename T>
concept Integer = std::is_integral_v<T>;การผสานคุณลักษณะชนิด
ใช้ตัวดำเนินการเชิงตรรกะเพื่อผสานคุณลักษณะชนิดให้เป็นแนวคิด
template <typename T>
concept SignedInteger = std::is_integral_v<T> && std::is_signed_v<T>;นิพจน์ requires
รูปแบบที่สื่อความหมายได้มากขึ้น: ระบุการดำเนินการที่ชนิดต้องรองรับ
template <typename T>
concept Addable = requires(T a, T b) {
a + b;
};ข้อกำหนดแบบผสม
ภายใน requires คุณสามารถระบุชนิดผลลัพธ์และข้อจำกัดเพิ่มเติมได้
template <typename T>
concept Number = requires(T a, T b) {
{ a + b } -> std::convertible_to<T>;
{ a * b } -> std::convertible_to<T>;
};ข้อกำหนดแบบซ้อน
เพิ่ม requires ภายในนิพจน์ requires เพื่อนำแนวคิดที่มีชื่อมาใช้
template <typename T>
concept Sortable = requires(T t) {
{ t.begin() };
{ t.end() };
requires std::movable<typename T::value_type>;
};ข้อกำหนดชนิด
คุณสามารถกำหนดให้ชนิดมีชนิดซ้อนหรือนามแฝงบางอย่างได้
template <typename T>
concept HasValueType = requires {
typename T::value_type;
};การใช้แนวคิดในแม่แบบ
ไวยากรณ์สามรูปแบบ:
// 1. Replace typename
template <Integer T>
T increment(T x) { return x + 1; }
// 2. requires after template parameters
template <typename T>
requires Integer<T>
T increment(T x) { return x + 1; }
// 3. requires after function signature
template <typename T>
T increment(T x) requires Integer<T> {
return x + 1;
}แนวคิดกับพารามิเตอร์ auto
แม่แบบฟังก์ชันแบบย่อก็สามารถกำหนดข้อจำกัดได้เช่นกัน
void process(Integer auto x) { std::cout << x; }ข้อจำกัดหลายรายการ
ผสานแนวคิดด้วย && และ ||
template <std::integral T, std::integral U>
requires (sizeof(T) >= sizeof(U))
T promote(U value) { return static_cast<T>(value); }รูปแบบการตั้งชื่อ
โค้ดส่วนใหญ่มักใช้ CamelCase กับแนวคิด ไลบรารีบางแห่งใช้ตัวพิมพ์เล็ก ซึ่งสอดคล้องกับไลบรารีมาตรฐาน โปรดเลือกรูปแบบหนึ่งและใช้ให้สม่ำเสมอ
แนวคิดในแม่แบบคลาส
กำหนดข้อจำกัดให้แม่แบบคลาสด้วยวิธีเดียวกัน
template <std::integral T>
class Counter { T value_; /* ... */ };แนวคิดที่นำกลับมาใช้ใหม่ได้
กำหนดไลบรารีของแนวคิดขนาดเล็ก แล้วนำมาประกอบกัน แนวคิดที่นำกลับมาใช้ใหม่ได้ช่วยให้แม่แบบอธิบายตัวเองได้และดูแลรักษาได้ง่าย
ตรวจสอบอย่างรวดเร็ว
ไวยากรณ์ใดภายในนิพจน์ requires ที่ตรวจสอบว่าผลลัพธ์ของ a + b สามารถแปลงเป็น T ได้
สรุปทบทวน
กำหนดแนวคิดด้วย concept Name = expression ใช้นิพจน์ requires สำหรับข้อจำกัดที่อิงการดำเนินการ โดยใช้ข้อกำหนดแบบผสม แบบซ้อน และข้อกำหนดชนิด ผสานแนวคิดด้วย && และ || เพื่อแสดงข้อจำกัดที่มีรายละเอียดครบถ้วน
เรียนรู้ C++ ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 51
- บทเรียน
- 203
คำถามที่พบบ่อย
บทเรียน “การกำหนด Concepts ด้วย requires” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การกำหนด Concepts ด้วย requires” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การกำหนด Concepts ด้วย requires”
กำหนด concepts แบบกำหนดเองด้วยนิพจน์ requires และข้อจำกัด คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การกำหนด Concepts ด้วย requires” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม
ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุใดจึงใช้ Concepts แทน SFINAE
- การกำหนด Concepts ด้วย requires
- การใช้ Concepts ในเทมเพลตและ auto
- Concepts มาตรฐานที่ใช้บ่อย: Integral และ Ranges