Concept tanımlama
- C++ kursu
- İleri seviye
- Ders 61/83
- 5 dk
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
#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
#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üğü
template<typename T> ____ Addable = requires(T a, T b) { a + b; };
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 |