Sobes.tech
Junior — Middle

Hoe kunnen beperkingen worden gesteld aan de types in template-parameters in C++?

sobes.tech AI

Antwoord van AI

In C++, kunnen beperkingen op typen in sjabloonparameters op verschillende manieren worden vastgesteld:

  1. SFINAE (Substitution Failure Is Not An Error) — met behulp van std::enable_if en andere meta-functies uit <type_traits>, kunnen sjabloonfuncties of -klassen worden ingeschakeld of uitgesloten op basis van de eigenschappen van de typen.
#include <type_traits>

template<typename T, typename = std::enable_if_t<std::is_integral_v<T>>>
void foo(T value) {
    // Implementatie voor gehele typen
}

int main() {
    foo(10);    // OK, int is geheel
    // foo(3.14); // Compileerfout, double is niet geschikt
}
  1. Concepts — vanaf C++20 kunnen concepts worden gebruikt voor meer leesbare en declaratieve typebeperkingen.
#include <concepts>

template<std::integral T>
void foo(T value) {
    // Implementatie voor gehele typen
}
  1. Statische asserties (static_assert) — binnen een sjabloon kunnen de eigenschappen van het type worden gecontroleerd en kan een compileerfout worden gegenereerd met een bericht.
#include <type_traits>

template<typename T>
void foo(T value) {
    static_assert(std::is_integral_v<T>, "T moet een geheel type zijn");
    // ...
}

Op deze manier helpen beperkingen om sjablonen veiliger en begrijpelijker te maken.