Sobes.tech
Junior — Middle

C++-də şablon parametrlərində tiplər üçün məhdudiyyətlər necə qoyula bilər?

sobes.tech Süni İntellekt

AI-dan cavab

C++ dilində şablon parametrlərində tiplər üzərində məhdudiyyətləri müxtəlif üsullarla təyin etmək mümkündür:

  1. SFINAE (Substitution Failure Is Not An Error)<type_traits> içindəki std::enable_if və digər meta-funksiyalar vasitəsilə, tiplərin xüsusiyyətlərinə əsasən şablon funksiyalar və ya siniflər daxil edilə və ya çıxarıla bilər.
#include <type_traits>

template<typename T, typename = std::enable_if_t<std::is_integral_v<T>>>
void foo(T value) {
    // Tam ədəd tipləri üçün tətbiq
}

int main() {
    foo(10);    // OK, int tam ədəddir
    // foo(3.14); // Kompilyasiya xətası, double uyğun deyil
}
  1. Konceptlər (Concepts) — C++20-dən başlayaraq, tiplər üçün daha oxunaqlı və deklarativ məhdudiyyətlər üçün konceptelər istifadə edilə bilər.
#include <concepts>

template<std::integral T>
void foo(T value) {
    // Tam ədədlər üçün tətbiq
}
  1. Statik təsdiqləmələr (static_assert) — şablon daxilində, tiplərin xüsusiyyətləri yoxlanıla və mesaj ilə kompilyasiya xətası yaradıla bilər.
#include <type_traits>

template<typename T>
void foo(T value) {
    static_assert(std::is_integral_v<T>, "T tam ədəd tipi olmalıdır");
    // ...
}

Bu cür məhdudiyyətlər şablonları daha təhlükəsiz və anlaşılan edir.