Sobes.tech
Junior — Middle

Jak lze nastavit omezení na typy v šablonových parametrech v C++?

sobes.tech AI

Odpověď od AI

V C++ lze omezení na typy v šablonových parametrech stanovit několika způsoby:

  1. SFINAE (Substitution Failure Is Not An Error) — pomocí std::enable_if a dalších meta-funkcí z <type_traits> lze zahrnout nebo vyloučit šablonové funkce nebo třídy v závislosti na vlastnostech typů.
#include <type_traits>

template<typename T, typename = std::enable_if_t<std::is_integral_v<T>>>
void foo(T value) {
    // Implementace pro celočíselné typy
}

int main() {
    foo(10);    // OK, int je celočíselný
    // foo(3.14); // Chyba kompilace, double nevyhovuje
}
  1. Koncepty (Concepts) — od C++20 lze použít koncepty pro přehlednější a deklarativní omezení typů.
#include <concepts>

template<std::integral T>
void foo(T value) {
    // Implementace pro celočíselné typy
}
  1. Statická tvrzení (static_assert) — uvnitř šablony lze zkontrolovat vlastnosti typu a vygenerovat chybovou hlášku.
#include <type_traits>

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

Tímto způsobem pomáhají omezení zpřehlednit a zpříjemnit používání šablon.