Sobes.tech
Junior — Middle

Ako možno nastaviť obmedzenia na typy v šablónových parametroch v C++?

sobes.tech AI

Odpoveď od AI

V C++ môžu byť obmedzenia na typy v šablónových parametroch stanovené rôznymi spôsobmi:

  1. SFINAE (Substitution Failure Is Not An Error) — pomocou std::enable_if a ďalších meta-funkcií z <type_traits>, je možné zahrnúť alebo vylúčiť šablónové funkcie alebo triedy v závislosti od vlastností typov.
#include <type_traits>

template<typename T, typename = std::enable_if_t<std::is_integral_v<T>>>
void foo(T value) {
    // Implementácia pre celé typy
}

int main() {
    foo(10);    // OK, int je celé číslo
    // foo(3.14); // Chyba kompilácie, double nevyhovuje
}
  1. Koncepty (Concepts) — od C++20 môžu byť použité koncepty na jednoduchšie a deklaratívne obmedzenia typov.
#include <concepts>

template<std::integral T>
void foo(T value) {
    // Implementácia pre celé typy
}
  1. Statické tvrdenia (static_assert) — vo vnútri šablóny je možné overiť vlastnosti typu a vygenerovať chybové hlásenie.
#include <type_traits>

template<typename T>
void foo(T value) {
    static_assert(std::is_integral_v<T>, "T musí byť celočíselný typ");
    // ...
}

Týmto spôsobom pomáhajú obmedzenia spraviť šablóny bezpečnejšími a zrozumiteľnejšími.