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:
- SFINAE (Substitution Failure Is Not An Error) — pomocou
std::enable_ifa ď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
}
- 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
}
- 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.