Sobes.tech
Junior — Middle

Kā var noteikt ierobežojumus tipiem šablona parametriem C++?

sobes.tech AI

Atbilde no AI

C++ šablonu parametru tipu ierobežojumus var noteikt vairākos veidos:

  1. SFINAE (Substitution Failure Is Not An Error) — izmantojot std::enable_if un citas <type_traits> meta-funkcijas, var iekļaut vai izslēgt šablonu funkcijas vai klases atkarībā no tipu īpašībām.
#include <type_traits>

template<typename T, typename = std::enable_if_t<std::is_integral_v<T>>>
void foo(T value) {
    // Realizācija veselajiem tipiem
}

int main() {
    foo(10);    // OK, int ir veselais tips
    // foo(3.14); // Kompilācijas kļūda, double neder
}
  1. Koncepcijas (Concepts) — no C++20, tās var izmantot, lai definētu skaidrākus un deklaratīvākus tipu ierobežojumus.
#include <concepts>

template<std::integral T>
void foo(T value) {
    // Realizācija veselajiem tipiem
}
  1. Statiskās apstiprināšanas (static_assert) — šablona iekšpusē var pārbaudīt tipu īpašības un izsaukt kļūdas ziņojumu.
#include <type_traits>

template<typename T>
void foo(T value) {
    static_assert(std::is_integral_v<T>, "T jābūt veselajam tipam");
    // ...
}

Šādi ierobežojumi palīdz padarīt šablonus drošākus un saprotamākus.