std:: integral_constant
|
Défini dans l'en-tête
<type_traits>
|
||
|
template
<
class
T, T v
>
struct integral_constant ; |
(depuis C++11) | |
std::integral_constant
encapsule une constante statique de type spécifié. C'est la classe de base pour les traits de type en C++.
Si le programme ajoute des spécialisations pour
std::integral_constant
, le comportement est indéfini.
Table des matières |
Modèles d'alias d'assistance
Un alias template auxiliaire
std::bool_constant
est défini pour le cas courant où
T
est
bool
.
|
template
<
bool
B
>
using bool_constant = integral_constant < bool , B > ; |
(depuis C++17) | |
Spécialisations
Deux typedefs pour le cas courant où
T
est
bool
sont fournis :
|
Défini dans l'en-tête
<type_traits>
|
|
| Nom | Définition |
true_type
|
std :: integral_constant < bool , true > |
false_type
|
std :: integral_constant < bool , false > |
Types membres
| Nom | Définition |
value_type
|
T |
type
|
std :: integral_constant < T, v > |
Constantes membres
| Nom | Valeur |
|
constexpr
T
value
[static]
|
v
(membre constant public static) |
Fonctions membres
|
operator value_type
|
renvoie la valeur encapsulée
(fonction membre publique) |
|
operator()
(C++14)
|
renvoie la valeur encapsulée
(fonction membre publique) |
std::integral_constant:: operator value_type
|
constexpr
operator value_type
(
)
const
noexcept
;
|
||
Fonction de conversion. Retourne la valeur encapsulée.
std::integral_constant:: operator()
|
constexpr
value_type operator
(
)
(
)
const
noexcept
;
|
(depuis C++14) | |
Retourne la valeur encapsulée. Cette fonction permet à
std::integral_constant
de servir de source d'objets fonction à temps de compilation.
Implémentation possible
template<class T, T v> struct integral_constant { static constexpr T value = v; using value_type = T; using type = integral_constant; // utilisation du nom de classe injecté constexpr operator value_type() const noexcept { return value; } constexpr value_type operator()() const noexcept { return value; } // depuis c++14 }; |
Notes
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_integral_constant_callable
|
201304L
|
(C++14) |
std::integral_constant::operator()
|
__cpp_lib_bool_constant
|
201505L
|
(C++17) |
std::bool_constant
|
Exemple
#include <type_traits> using two_t = std::integral_constant<int, 2>; using four_t = std::integral_constant<int, 4>; static_assert(not std::is_same_v<two_t, four_t>); static_assert(two_t::value * 2 == four_t::value, "2*2 != 4"); static_assert(two_t() << 1 == four_t() >> 0, "2*2 != 4"); enum class E{ e1, e2 }; using c1 = std::integral_constant<E, E::e1>; using c2 = std::integral_constant<E, E::e2>; static_assert(c1::value != E::e2); static_assert(c1() == E::e1); static_assert(std::is_same_v<c2, c2>); int main() {}
Voir aussi
|
(C++14)
|
implémente une séquence d'entiers à la compilation
(modèle de classe) |