Junior — Middle
Kuidas saab C++-s määrata piiranguid malliparameetritele?
sobes.tech AI
Vastus AI-lt
C++-is saab piiranguid tüüpidele mallparametrites määrata mitmel viisil:
- SFINAE (Substitution Failure Is Not An Error) — kasutades
<type_traits>-ststd::enable_ifja muid meta-funktsioone, saab mallfunktsioone või -klasse lisada või välja jätta sõltuvalt tüüpide omadustest.
#include <type_traits>
template<typename T, typename = std::enable_if_t<std::is_integral_v<T>>>
void foo(T value) {
// Täisarvutüübid
}
int main() {
foo(10); // OK, int on täisarv
// foo(3.14); // Kompileerimisviga, double ei sobi
}
- Käsitused (Concepts) — alates C++20 saab kasutada käsitusi, et määrata tüüpide piiranguid selgemalt ja deklaratiivsemalt.
#include <concepts>
template<std::integral T>
void foo(T value) {
// Täisarvutüübid
}
- Staatilised kinnitused (
static_assert) — mallide sees saab kontrollida tüüpide omadusi ja tekitada kompileerimisvea sõnumiga.
#include <type_traits>
template<typename T>
void foo(T value) {
static_assert(std::is_integral_v<T>, "T peab olema täisarvuline tüüp");
// ...
}
Sellised piirangud aitavad teha mallid turvalisemaks ja arusaadavamaks.