C++ Academy · Pelajaran

Mendefinisikan Concepts dengan requires

Definisikan concepts kustom menggunakan ekspresi requires dan batasan

Pelajaran 2 dari 414 langkah

Mendefinisikan Concepts dengan requires adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.

Kata Kunci concept

Deklarasikan konsep dengan template <params> concept Name = expression; Ekspresi tersebut harus berupa boolean pada waktu kompilasi.

template <typename T>
concept Integer = std::is_integral_v<T>;

Menggabungkan Ciri Tipe

Gunakan operator logika untuk menggabungkan ciri tipe menjadi sebuah konsep.

template <typename T>
concept SignedInteger = std::is_integral_v<T> && std::is_signed_v<T>;

Ekspresi requires

Bentuk yang lebih ekspresif: cantumkan operasi yang harus didukung oleh tipe tersebut.

template <typename T>
concept Addable = requires(T a, T b) {
    a + b;
};

Persyaratan Gabungan

Di dalam requires, Anda dapat menentukan tipe hasil dan batasan tambahan.

template <typename T>
concept Number = requires(T a, T b) {
    { a + b } -> std::convertible_to<T>;
    { a * b } -> std::convertible_to<T>;
};

Persyaratan Bersarang

Tambahkan requires di dalam ekspresi requires untuk menyertakan konsep bernama.

template <typename T>
concept Sortable = requires(T t) {
    { t.begin() };
    { t.end() };
    requires std::movable<typename T::value_type>;
};

Persyaratan Tipe

Anda dapat mensyaratkan agar suatu tipe memiliki tipe bersarang atau alias tertentu.

template <typename T>
concept HasValueType = requires {
    typename T::value_type;
};

Menggunakan Konsep dalam Templat

Tiga sintaks:

// 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;
}

Konsep dan Parameter auto

Templat fungsi singkat juga dapat diberi batasan.

void process(Integer auto x) { std::cout << x; }

Beberapa Batasan

Gabungkan konsep dengan && dan ||.

template <std::integral T, std::integral U>
    requires (sizeof(T) >= sizeof(U))
T promote(U value) { return static_cast<T>(value); }

Konvensi Penamaan

Sebagian besar kode menggunakan CamelCase untuk konsep. Beberapa pustaka menggunakan huruf kecil (menyesuaikan pustaka standar). Pilih satu konvensi dan gunakan secara konsisten.

Konsep dalam Templat Kelas

Beri batasan pada templat kelas dengan cara yang sama.

template <std::integral T>
class Counter { T value_; /* ... */ };

Konsep yang Dapat Digunakan Kembali

Definisikan pustaka konsep-konsep kecil, lalu susun menjadi komposisi. Konsep yang dapat digunakan kembali membuat templat mendokumentasikan dirinya sendiri dan mudah dipelihara.

Pemeriksaan Singkat

Sintaks apa di dalam ekspresi requires yang memeriksa apakah hasil dari a + b dapat dikonversi menjadi T?

Ringkasan

Definisikan konsep dengan concept Name = expression. Gunakan ekspresi requires untuk batasan berbasis operasi dengan persyaratan gabungan, bersarang, dan tipe. Gabungkan konsep dengan && dan || untuk menyatakan batasan yang kaya.

Gratis untuk memulai

Belajar C++ dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
51
Pelajaran
203

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mendefinisikan Concepts dengan requires” gratis?

Ya — teks lengkap “Mendefinisikan Concepts dengan requires” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Mendefinisikan Concepts dengan requires”?

Definisikan concepts kustom menggunakan ekspresi requires dan batasan Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C++ Academy?

Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Mendefinisikan Concepts dengan requires” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?

Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mengapa Concepts vs SFINAE
  2. Mendefinisikan Concepts dengan requires
  3. Menggunakan Concepts dalam Template dan auto
  4. Concepts Standar: Integral dan Rentang
← Kembali ke C++ Academy