close
The Wayback Machine - https://web.archive.org/web/20221222104705/https://es.cppreference.com/w/cpp/meta
Espacios de nombres
Variantes
Acciones

Metaprogramming library

De cppreference.com
< cpp
 
 
Biblioteca de metaprogramación
Rasgos de tipo
Categorías de tipo
(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 tipo
Metafunciones
(C++17)
Operaciones admitidas
Relaciones y consultas de propiedades
Modificaciones de tipos
(C++11)(C++11)(C++11)
Transformaciones de tipos
(C++11)(en desuso en C++23)
(C++11)(en desuso en C++23)
(C++11)
(C++11)
(C++17)

(C++11)(hasta C++20)(C++17)
Aritmética racional en tiempo de compilación
Secuencias de enteros en tiempo de compilación
 

C++ proporciona funciones de metaprogramación, como rasgos de tipo, aritmética racional en tiempo de compilación y secuencias de enteros en tiempo de compilación.

Contenido

[editar] Propiedad tipo

Estos rasgos de tipo definen interfaces basadas en plantillas en tiempo de compilación para consultar las propiedades de los tipos.

Intentar especializar una plantilla definida en el encabezado <type_traits> y descrito en esta sección da como resultado un comportamiento no definido.

Se puede crear una instancia de una plantilla definida en el encabezado <type_traits> con un tipo incompleto a menos que se especifique lo contrario, sin perjuicio de la prohibición general de crear instancias de plantillas de biblioteca estándar con tipos incompletos.

Definido en el archivo de encabezado <type_traits>
Categorías de tipo primarias
(C++11)
Comprueba si un tipo es void
(plantilla de clase) [editar]
Comprueba si un tipo es std::nullptr_t
(plantilla de clase) [editar]
Comprueba si un tipo T es entero.
(plantilla de clase) [editar]
Comprueba si un tipo T es de punto flotante
(plantilla de clase) [editar]
(C++11)
Comprueba si un tipo es un tipo array
(plantilla de clase) [editar]
(C++11)
Comprueba si un tipo es un tipo enumeración
(plantilla de clase) [editar]
(C++11)
Comprueba si un tipo es un tipo unión
(plantilla de clase) [editar]
(C++11)
Comprueba si un tipo es un tipo clase (pero no un tipo unión).
(plantilla de clase) [editar]
Comprueba si un tipo es un tipo función
(plantilla de clase) [editar]
Comprueba si un tipo es un tipo puntero
(plantilla de clase) [editar]
Comprueba si un tipo es una referencia lvalue.
(plantilla de clase) [editar]
Comprueba si un tipo es una referencia rvalue.
(plantilla de clase) [editar]
Comprueba si un tipo es un puntero a un objeto miembro no estático
(plantilla de clase) [editar]
Comprueba si un tipo es un puntero a una función miembro no estática
(plantilla de clase) [editar]
Categorías de tipo compuestas
Comprueba si un tipo es un tipo fundamental
(plantilla de clase) [editar]
Comprueba si un tipo es de tipo aritmético
Original:
checks if a type is arithmetic type
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(plantilla de clase) [editar]
(C++11)
Comprueba si un tipo es de tipo escalar
Original:
checks if a type is scalar type
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(plantilla de clase) [editar]
(C++11)
Comprueba si un tipo es un tipo objeto
(plantilla de clase) [editar]
Comprueba si un tipo es de tipo compuesto
Original:
checks if a type is compound type
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(plantilla de clase) [editar]
Comprueba si un tipo es o bien una referencia lvalue o una referencia rvalue
(plantilla de clase) [editar]
Comprueba si un tipo es un puntero a una función miembro no estática o a un objeto miembro no estático.
(plantilla de clase) [editar]
Propiedades de tipos
(C++11)
Comprueba si un tipo está calificado con el calificador const
(plantilla de clase) [editar]
Comprueba si un tipo está calificado con el calificador volatile
(plantilla de clase) [editar]
Comprueba si un tipo es trivial
Original:
checks if a type is trivial
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(plantilla de clase) [editar]
Comprueba si un tipo es trivialmente copiable.
(plantilla de clase) [editar]
Comprueba si un tipo es un tipo de diseño estándar.
(plantilla de clase) [editar]
(C++11)
Comprueba si un tipo es un tipo simple (POD).
(plantilla de clase) [editar]
Comprueba si un tipo es un tipo literal.
(plantilla de clase) [editar]
Comprueba si cada bit en la representación de objeto del tipo contribuye a su valor.
(plantilla de clase) [editar]
(C++11)
Comprueba si un tipo es un tipo de clase que no es una unión y no tiene datos.
(plantilla de clase) [editar]
Comprueba si un tipo es tipo clase polimórfico
(plantilla de clase) [editar]
Comprueba si un tipo es el tipo de clase abstracta
Original:
checks if a type is abstract class type
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(plantilla de clase) [editar]
(C++14)
Comprueba si un tipo es un tipo de clase final.
(plantilla de clase) [editar]
Comprueba si un tipo es un tipo de agregado.
(plantilla de clase) [editar]
(C++11)
Comprueba si un tipo es un tipo aritmético con signo.
(plantilla de clase) [editar]
Comprueba si un tipo es el tipo de aritmética sin signo
Original:
checks if a type is unsigned arithmetic type
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(plantilla de clase) [editar]
Comprueba si un tipo es un tipo de array de límite conocido.
(plantilla de clase) [editar]
Comprueba si un tipo es un tipo de array de límite desconocido.
(plantilla de clase) [editar]
Comprueba si un tipo es un tipo enumeración con ámbito
(plantilla de clase) [editar]
Operaciones admitidas
Comprueba si un tipo tiene un constructor de argumentos concretos
Original:
checks if a type has a constructor for specific arguments
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(plantilla de clase) [editar]
Comprueba si un tipo tiene un constructor por defecto
Original:
checks if a type has a default constructor
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(plantilla de clase) [editar]
Comprueba si un tipo tiene un constructor de copia
Original:
checks if a type has a copy constructor
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(plantilla de clase) [editar]
Comprueba si un tipo tiene un constructor de movimiento
Original:
checks if a type has a move constructor
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(plantilla de clase) [editar]
Comprueba si un tipo tiene un operador de asignación para un argumento específico
Original:
checks if a type has a assignment operator for a specific argument
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(plantilla de clase) [editar]
Comprueba si un tipo tiene un operador de asignación de copia
Original:
checks if a type has a copy assignment operator
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(plantilla de clase) [editar]
Comprueba si un tipo tiene un operador de asignación de movimiento
Original:
checks if a type has a move assignment operator
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(plantilla de clase) [editar]
Comprueba si un tipo tiene un destructor no eliminado
Original:
checks if a type has a non-deleted destructor
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(plantilla de clase) [editar]
Comprueba si un tipo tiene un destructor virtual
Original:
checks if a type has a virtual destructor
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(plantilla de clase) [editar]
Comprueba si objetos de un tipo pueden intercambiarse con objetos del mismo tipo o diferente tipo.
(plantilla de clase) [editar]
Consultas de propiedades
Obtiene los requisitos de alineación del tipo
(plantilla de clase) [editar]
(C++11)
Obtiene el número de dimensiones de un tipo array
(plantilla de clase) [editar]
(C++11)
Obtiene el tamaño de un tipo array a lo largo de una dimensión especificada
(plantilla de clase) [editar]
Relaciones de tipos
(C++11)
Comprueba si dos tipos son los mismos
(plantilla de clase) [editar]
Comprueba si un tipo es derivado de otro tipo
(plantilla de clase) [editar]
Comprueba si un tipo puede convertirse a otro tipo.
(plantilla de clase) [editar]
Comprueba si un tipo puede invocarse (como si lo fuera por std::invoke) con el número de argumentos dado.
(plantilla de clase) [editar]
Comprueba si una referencia está vinculada a un temporal en la inicialización directa.
(plantilla de clase) [editar]
Comprueba si una referencia está vinculada a un temporal en la inicialización por copia.
(plantilla de clase) [editar]
Comprueba si dos tipos tienen diseño compatible.
(plantilla de clase) [editar]
Comprueba si un tipo es una base (inicial) interconvertible-por-puntero a otro tipo.
(plantilla de clase) [editar]
Comprueba si los objetos de un tipo son interconvertibles-por-puntero con el subobjeto especificado de ese tipo.
(plantilla de función) [editar]
Comprueba si dos miembros especificados se corresponden mutuamente en la subsecuencia inicial común de dos tipos especificados.
(plantilla de función) [editar]

[editar] Operaciones en los rasgos

Definido en el archivo de encabezado <type_traits>
Metafunción variádica de AND lógico.
(plantilla de clase) [editar]
Metafunción variádica de OR lógico.
(plantilla de clase) [editar]
(C++17)
Metafunción NOT lógico.
(plantilla de clase) [editar]

[editar] Clases base

Definido en el archivo de encabezado <type_traits>
Constante en tiempo de compilación del tipo especificado con el valor especificado.
(plantilla de clase) [editar]

Se proporcionan dos especializaciones de std::integral_constant para el tipo bool:

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

[editar] Modificaciones de tipos

Estos rasgos de tipo aplican modificaciones en un parámetro de plantilla y declaran (a veces condicionalmente) la definición de tipo miembro type como el tipo resultante.

Intentar especializar una plantilla definida en el encabezado <type_traits> y descrita en esta sección da como resultado un comportamiento no definido, excepto que std::common_type y std::basic_common_reference (desde C++20) pueden especializarse según lo requiera la descripción.

Se puede crear una instancia de una plantilla definida en el encabezado <type_traits> con un tipo incompleto a menos que se especifique lo contrario, sin perjuicio de la prohibición general de crear instancias de plantillas de biblioteca estándar con tipos incompletos.

Definido en el archivo de encabezado <type_traits>
Const-volatility specifiers
Elimina los especificadores const y/o volatile del tipo dado.
(plantilla de clase) [editar]
(C++11)(C++11)(C++11)
Agrega los especificadores const y/o volatile al tipo dado
(plantilla de clase) [editar]
Referencias
Elimina la referencia de un tipo dado.
(plantilla de clase) [editar]
Añade referencia lvalue o rvalue al tipo dado.
(plantilla de clase) [editar]
Punteros
Elimina el puntero del tipo dado
(plantilla de clase) [editar]
Agrega puntero al tipo dado
(plantilla de clase) [editar]
Modificadores de signo
Hace al tipo entero dado con signo
(plantilla de clase) [editar]
Hace al tipo entero dado sin signo
(plantilla de clase) [editar]
Arrays
Elimina una dimensión del tipo array dado
(plantilla de clase) [editar]
Elimina todas las dimensiones del tipo array dado
(plantilla de clase) [editar]

[editar] Transformaciones misceláneas

Definido en el archivo de encabezado <type_traits>
Define el tipo adecuado para su uso como almacenamiento sin inicializar para tipos de un tamaño dado
(plantilla de clase) [editar]
Define el tipo adecuado para su uso como almacenamiento sin inicializar para todos los tipos dados
(plantilla de clase) [editar]
(C++11)
Aplica transformaciones de tipo como se cuando pasa un argumento de función por valor
(plantilla de clase) [editar]
Combina std::remove_cv y std::remove_reference.
(plantilla de clase) [editar]
(C++11)
Esconde una sobrecarga de función o especialización de plantilla basada en un valor Booleano en tiempo de compilación
(plantilla de clase) [editar]
Escoge un tipo u otro basado un tipo Booleano en tiempo de compilación
(plantilla de clase) [editar]
Deduce el tipo del resultado de una expresión aritmética mixta
(plantilla de clase) [editar]
Determina el tipo común de referencia de un grupo de tipos
(plantilla de clase) [editar]
Obtiene el tipo subyacente entero para un tipo enumeración dado
(plantilla de clase) [editar]
(C++11)
Deduce el tipo de retorno de una expresión de llamada a la función.
(plantilla de clase) [editar]
(C++17)
Plantilla de alias void variádica.
(plantilla de alias) [editar]
Devuelve el argumento del tipo sin modificarlo.
(plantilla de clase) [editar]

[editar] Aritmética racional en tiempo de compilación

El encabezado <ratio> proporciona tipos y funciones para manipular y almacenar razones matemáticas en tiempo de compilación.

[editar] Secuencias de enteros en tiempo de compilación

Definido en el archivo de encabezado <utility>
Implementa una secuencia de enteros en tiempo de compilación.
(plantilla de clase) [editar]