Junior — Middle
Jak można nałożyć ograniczenia na typy w parametrach szablonów w C++?
sobes.tech AI
Odpowiedź od AI
W C++ ograniczenia typów w parametrach szablonów można ustalić na kilka sposobów:
- SFINAE (Substitution Failure Is Not An Error) — za pomocą
std::enable_ifi innych meta-funkcji z<type_traits>można włączać lub wyłączać funkcje lub klasy szablonowe w zależności od właściwości typów.
#include <type_traits>
template<typename T, typename = std::enable_if_t<std::is_integral_v<T>>>
void foo(T value) {
// Implementacja dla typów całkowitych
}
int main() {
foo(10); // OK, int jest typem całkowitym
// foo(3.14); // Błąd kompilacji, double nie pasuje
}
- Koncepcy (Concepts) — od C++20 można używać koncepcji do bardziej czytelnych i deklaratywnych ograniczeń typów.
#include <concepts>
template<std::integral T>
void foo(T value) {
// Implementacja dla typów całkowitych
}
- Statyczne asercje (
static_assert) — wewnątrz szablonu można sprawdzić właściwości typu i zgłosić błąd kompilacji z komunikatem.
#include <type_traits>
template<typename T>
void foo(T value) {
static_assert(std::is_integral_v<T>, "T musi być typem całkowitym");
// ...
}
W ten sposób ograniczenia pomagają uczynić szablony bezpieczniejszymi i bardziej czytelnymi.