Ce face std::integral
Un concept este o condiție pe tipuri, cu nume. std::integral<T> este satisfăcut de tipurile întregi (inclusiv bool și char), iar std::floating_point<T> de float, double, long double.
Se pot folosi în trei feluri: în lista de șablon (template <std::integral T>), cu auto în parametru (void f(std::integral auto x)) sau într-o clauză requires. Dacă tipul nu se potrivește, mesajul de eroare spune clar ce condiție nu este îndeplinită.
Parametri
| Parametru | Descriere |
|---|---|
T |
Tipul verificat. |
Ce returnează
Un concept: o condiție bool verificată la compilare.
Exemple
Exemplul 1: Funcții restrânse la anumite tipuri
#include <concepts>
#include <print>
template <std::integral T>
bool estePar(T n) { return n % 2 == 0; }
double medie(std::floating_point auto a, std::floating_point auto b) { return (a + b) / 2; }
int main() {
std::println("14 par: {}", estePar(14));
std::println("7L par: {}", estePar(7L));
std::println("medie: {}", medie(9.5, 8.0f));
// estePar(2.5); // eroare: double nu satisface std::integral
}
Rezultat
14 par: true
7L par: false
medie: 8.75
Exemplul 2: Conceptele ca valori bool
#include <concepts>
#include <print>
int main() {
std::println("integral<int>: {}", std::integral<int>);
std::println("integral<bool>: {}", std::integral<bool>);
std::println("integral<double>: {}", std::integral<double>);
std::println("floating_point<float>: {}", std::floating_point<float>);
}
Rezultat
integral<int>: true
integral<bool>: true
integral<double>: false
floating_point<float>: true
Greșeli frecvente
- Scrii
std::integral Tfărătemplatesau fărăauto:void f(std::integral x). Nu compilează; conceptul trebuie urmat deautoîn lista de parametri.
Comenzi înrudite
std::is_integral: is_integral verifică dacă un tip este întreg (inclusiv bool și char); is_floating_point, dacă este real.std::same_as: Concepte C++20: same_as cere exact același tip, convertible_to cere un tip care se poate converti în altul.concept: Dă un nume unui set de cerințe pentru tipuri, folosit ca să restrângi ce tipuri acceptă un șablon.requires: Scrie cerințe pentru parametrii unui șablon: ca clauză care restrânge șablonul sau ca expresie care verifică dacă un cod este valid.std::enable_if: Activează o funcție-șablon doar pentru tipurile care îndeplinesc o condiție (tehnica SFINAE).