CodeBlanks Logo Icon CodeBlanks

Concept tanımlama

C++20 concept tanımlamayı öğrenirsin.

Concept nedir?

Bir concept, şablon parametreleri için adlandırılmış bir derleme zamanı koşuludur. C++20 ile geldi. Hangi türlerin geçerli olduğunu okunabilir biçimde söyler.

Örnek: template<typename T> concept Numeric = std::is_arithmetic_v<T>;. Burada Numeric bir concept'tir; aritmetik türleri kabul eder. Eski C++'ta şablon hataları yüzlerce satıra yayılırdı; concept'ler bunu tek satıra indirir.

Concept'ler şablon kısıtlarını adlandırır; böylece kod hem daha okunaklı hem de daha iyi hata iletileri üretir.

Concept tanımı sözdizimi

Concept tanımı şöyle yazılır: template<typename T> concept İsim = koşul;. koşul bool döndüren bir derleme zamanı ifadesidir.

Koşul ya hazır bir concept'tir (std::integral<T>), ya bir requires ifadesidir, ya da bir std::is_..._v şablon değişkenidir. Concept adları PascalCase yazılır: Addable, Numeric, Hashable. Bu adlandırma sayesinde concept'ler birer belge gibi okunur.

Uygulama Addable concept'ini tanımla

Addable concept'ini tanımla: requires(T a, T b) { a + b; } gövdesini kullansın. main içinde static_assert(Addable<int>); ile sına ve std::cout ile "Addable testi geçti" yaz.

Başlangıç kodu

main.cpp
#include <iostream>
#include <concepts>

// Addable concept'ini buraya tanımla

int main() {
    // int için test et ve mesaj yaz
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <concepts>

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

int main() {
    static_assert(Addable<int>);
    std::cout << "Addable testi geçti";
    return 0;
}

Beklenen çıktı

Addable testi geçti

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Hangisi bir concept tanımıdır?

  • template<typename T> concept Addable = requires(T a, T b) { a + b; }; Doğru cevap
  • template<typename T> auto Addable(T a, T b) { return a + b; }
  • template<typename T> struct Addable { };
  • concept Addable = int + int;

Açıklama: concept anahtar sözcüğü ve bir şablon parametresi ile tanımlanır.

2 concept anahtar sözcüğü

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

Açıklama: concept anahtar sözcüğü concept tanımını başlatır.

3 Parçayı rolüne eşle

Kavram Anlamı
template<typename T> Şablon parametresi
concept Adlandırılmış kısıt
requires(T a, T b) İfade denetimi
a + b Geçerli ifade

İleri seviye bölümündeki tüm dersler