Espacios de nombres
Variantes

std::integral_constant

De cppreference.com
 
 
Biblioteca de servicios
 
Apoyo de tipos
Tipos básicos
Tipos fundamentales
Tipos enteros de anchura fija (C++11)
Límites numéricos
Interfaz de C de límites numéricos
Información de tipo
en tiempo de ejecución
Rasgos de tipos
Categorías de tipos
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Propiedades de tipos
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(hasta C++20)
(C++11)(en desuso en C++20)
(C++11)
Constantes de rasgos de tipos
Metafunciones
(C++17)
Contexto de evaluación constante
Operaciones soportadas
Relaciones y consultas de propiedades
Modificaciones de tipos
(C++11)(C++11)(C++11)
Transformaciones de tipos
(C++11)
(C++11)
(C++17)
(C++11)(hasta C++20)(C++17)
 
<tbody> </tbody>
Definido en el archivo de encabezado <type_traits>
template< class T, T v > struct integral_constant;
(desde C++11)

std::integral_constant envuelve una constante estática del tipo especificado. Es la clase base para los rasgos de tipo de C++.

El comportamiento de un programa que añade especializaciones para integral_constant no está definido.

Plantillas auxiliares

Se define un alias de plantilla auxiliar std::bool_constant para el caso común donde T es bool.

<tbody> </tbody>
template <bool B> using bool_constant = integral_constant<bool, B>;
(desde C++17)

Especializaciones

Se proporcionan dos declaraciones typedef para el caso común donde T es bool:

Definido en el archivo de encabezado <type_traits>
Tipo Definición
true_type std::integral_constant<bool, true>
false_type std::integral_constant<bool, false>

Tipos miembro

Tipo Definición
value_type T
type std::integral_constant<T, v>

Constantes miembro

Nombre Valor
value
[estático]
v
(constante miembro pública estática)

Funciones miembro

Devuelve el valor envuelto
(función miembro pública) [editar]
Devuelve el valor envuelto
(función miembro pública) [editar]

std::integral_constant::operator value_type

<tbody> </tbody>
constexpr operator value_type() const noexcept;

Función de conversión. Devuelve el valor envuelto.

std::integral_constant::operator()

<tbody> </tbody>
constexpr value_type operator()() const noexcept;
(desde C++14)

Devuelve el valor envuelto. Esta función habilita a std::integral_constant para que sirva como fuente de objetos función en tiempo de compilación.

Posible implementación

template<class T, T v>
struct integral_constant
{
    static constexpr T value = v;
    using value_type = T;
    using type = integral_constant; // usando el nombre de clase inyectado
    constexpr operator value_type() const noexcept { return value; }
    constexpr value_type operator()() const noexcept { return value; } // desde c++14
};

Notas

Macro de prueba de característica Valor Estándar Comentario
__cpp_lib_integral_constant_callable 201304L (C++14) std::integral_constant::operator()
__cpp_lib_bool_constant 201505L (C++17) std::bool_constant

Ejemplo

#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() {}


Véase también

Implementa una secuencia de enteros en tiempo de compilación.
(plantilla de clase) [editar]