Sobes.tech
Junior — Middle

C++ da shablon parametrlaridagi turlar uchun cheklovlarni qanday belgilash mumkin?

sobes.tech AI

AIdan javob

C++ da, shablon parametrlari ichida turlar uchun cheklovlarni bir nechta usullar bilan belgilash mumkin:

  1. SFINAE (Substitution Failure Is Not An Error)<type_traits> ichidagi std::enable_if va boshqa meta-funksiyalar yordamida, turlar xususiyatlariga qarab, shablon funksiyalar yoki sinflarni qo'shish yoki chiqarib tashlash mumkin.
#include <type_traits>

template<typename T, typename = std::enable_if_t<std::is_integral_v<T>>>
void foo(T value) {
    // Butun turlar uchun amalga oshirish
}

int main() {
    foo(10);    // OK, int butun tur
    // foo(3.14); // Kompilyatsiya xatosi, double mos kelmaydi
}
  1. Konceptlar (Concepts) — C++20 dan boshlab, turlar uchun cheklovlar uchun ko'proq o'qilishi oson va deklarativ konceptslar ishlatish mumkin.
#include <concepts>

template<std::integral T>
void foo(T value) {
    // Butun turlar uchun amalga oshirish
}
  1. Statik tasdiqlar (static_assert) — shablon ichida, tur xususiyatlarini tekshirish va xato xabar bilan kompilyatsiya qilish mumkin.
#include <type_traits>

template<typename T>
void foo(T value) {
    static_assert(std::is_integral_v<T>, "T butun tur bo'lishi kerak");
    // ...
}

Shu tarzda, cheklovlar shablonlarni yanada xavfsiz va tushunarli qilishga yordam beradi.