Sobes.tech
Junior — Middle

როგორ შეიძლება დააყენოთ შეზღუდვები ტიპებზე C++-ში შაბლონის პარამეტრებში?

sobes.tech AI

პასუხი AI-სგან

C++-ში, შაბლონის პარამეტრებში ტიპებზე შეზღუდვებს რამდენიმე გზით შეიძლება განსაზღვრო:

  1. SFINAE (Substitution Failure Is Not An Error)<type_traits>-დან std::enable_if და სხვა მMETA-ფუნქციების გამოყენებით, შაბლონის ფუნქციებს ან კლასებს შეიძლება ჩართვა ან გამორიცხვა ტიპების თვისებების მიხედვით.
#include <type_traits>

template<typename T, typename = std::enable_if_t<std::is_integral_v<T>>>
void foo(T value) {
    // განხორციელება მთელი ტიპებისთვის
}

int main() {
    foo(10);    // OK, 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 უნდა იყოს მთელი ტიპი");
    // ...
}

ამ გზით, შეზღუდვები ეხმარება შაბლონებს გახდნენ უფრო უსაფრთხო და გასაგები.