Sobes.tech
Junior — Middle

C++та шаблон параметрлериндеги түрлөргө чектөөлөрдү кантип коюуга болот?

sobes.tech AI

AIден жооп

C++-да, шаблон параметрлериндеги түрлөргө чектөөлөрдү бир нече жол менен белгилөө мүмкүн:

  1. SFINAE (Substitution Failure Is Not An Error)<type_traits> ичиндеги std::enable_if жана башка мета-функциялар аркылуу, түрлөрдүн өзгөчөлүктөрүнө жараша шаблон функцияларды же класстарды кошуу же чыгарып салуу мүмкүн.
#include <type_traits>

template<typename T, typename = std::enable_if_t<std::is_integral_v<T>>>
void foo(T value) {
    // бүтүн түрлөр үчүн ишке ашыруу
}

int main() {
    foo(10);    // ОК, int бүтүн түр
    // foo(3.14); // Компиляция катасы, double ылайыктуу эмес
}
  1. Концепциялар (Concepts) — C++20дан баштап, түрлөргө коюлган чектөөлөрдү көбүрөөк окула турган жана декларативдүү кылуу үчүн колдонсо болот.
#include <concepts>

template<std::integral T>
void foo(T value) {
    // бүтүн түрлөр үчүн ишке ашыруу
}
  1. Статикалык тастыктамалар (static_assert) — шаблон ичинде, түрдүн өзгөчөлүктөрүн текшерип, каттоо билдирүүсү менен ката чыгаруу мүмкүн.
#include <type_traits>

template<typename T>
void foo(T value) {
    static_assert(std::is_integral_v<T>, "T бүтүн түр болушу керек");
    // ...
}

Мындай чектөөлөр шаблонду көбүрөөк коопсуз жана түшүнүктүү кылууга жардам берет.