std::remove_cv, std::remove_const, std::remove_volatile
De cppreference.com
Definido en el archivo de encabezado <type_traits>
|
||
template< class T > struct remove_cv; |
(1) | (desde C++11) |
template< class T > struct remove_const; |
(2) | (desde C++11) |
template< class T > struct remove_volatile; |
(3) | (desde C++11) |
Proporciona la definición de tipo (typedef) miembro type
que es igual a T
, excepto que los calificadores-cv de nivel superior están eliminados.
1) Elimina el calificador const de nivel superior, o el calificador volatile de nivel superior, o ambos, si están presentes.
2) Elimina el calificador const de nivel superior.
3) Elimina el calificador volatile de nivel superior.
El comportamiento de un programa que añade especializaciones para cualquiera de las plantillas definidas en esta página no está definido.
Contenido |
[editar] Tipos miembro
Nombre | Definición |
type
|
El tipo T sin el calificador-cv.
|
[editar] Tipos auxiliares
template< class T > using remove_cv_t = typename remove_cv<T>::type; |
(desde C++14) | |
template< class T > using remove_const_t = typename remove_const<T>::type; |
(desde C++14) | |
template< class T > using remove_volatile_t = typename remove_volatile<T>::type; |
(desde C++14) | |
[editar] Posible implementación
template< class T > struct remove_cv { typedef T type; }; template< class T > struct remove_cv<const T> { typedef T type; }; template< class T > struct remove_cv<volatile T> { typedef T type; }; template< class T > struct remove_cv<const volatile T> { typedef T type; }; template< class T > struct remove_const { typedef T type; }; template< class T > struct remove_const<const T> { typedef T type; }; template< class T > struct remove_volatile { typedef T type; }; template< class T > struct remove_volatile<volatile T> { typedef T type; }; |
[editar] Ejemplo
La eliminación de const/volatile de const volatile int * no modifica el tipo, ya que el puntero mismo no es ni const ni volatile.
Ejecuta este código
#include <iostream> #include <type_traits> int main() { typedef std::remove_cv<const int>::type type1; typedef std::remove_cv<volatile int>::type type2; typedef std::remove_cv<const volatile int>::type type3; typedef std::remove_cv<const volatile int*>::type type4; typedef std::remove_cv<int * const volatile>::type type5; std::cout << "prueba1 " << (std::is_same<int, type1>::value ? "pasa" : "falla") << '\n'; std::cout << "prueba2 " << (std::is_same<int, type2>::value ? "pasa" : "falla") << '\n'; std::cout << "prueba3 " << (std::is_same<int, type3>::value ? "pasa" : "falla") << '\n'; std::cout << "prueba4 " << (std::is_same<const volatile int*, type4>::value ? "pasa" : "falla") << '\n'; std::cout << "prueba5 " << (std::is_same<int*, type5>::value ? "pasa" : "falla") << '\n'; }
Salida:
prueba1 pasa prueba2 pasa prueba3 pasa prueba4 pasa prueba5 pasa
[editar] Véase también
(C++11) |
Comprueba si un tipo está calificado con el calificador const (plantilla de clase) |
(C++11) |
Comprueba si un tipo está calificado con el calificador volatile (plantilla de clase) |
(C++11)(C++11)(C++11) |
Agrega los especificadores const y/o volatile al tipo dado (plantilla de clase) |
(C++20) |
Combina std::remove_cv y std::remove_reference. (plantilla de clase) |