Buscar..
Introducción
La palabra clave decltype
se puede usar para obtener el tipo de una variable, función o expresión.
Ejemplo básico
Este ejemplo solo ilustra cómo se puede utilizar esta palabra clave.
int a = 10;
// Assume that type of variable 'a' is not known here, or it may
// be changed by programmer (from int to long long, for example).
// Hence we declare another variable, 'b' of the same type using
// decltype keyword.
decltype(a) b; // 'decltype(a)' evaluates to 'int'
Si, por ejemplo, alguien cambia, escriba 'a' a:
float a=99.0f;
Entonces el tipo de variable b
ahora se convierte automáticamente en float
.
Otro ejemplo
Digamos que tenemos vector:
std::vector<int> intVector;
Y queremos declarar un iterador para este vector. Una idea obvia es usar auto
. Sin embargo, puede ser necesario simplemente declarar una variable de iterador (y no asignarla a nada). Haríamos:
vector<int>::iterator iter;
Sin embargo, con decltype
se vuelve fácil y menos propenso a errores (si cambia el tipo de intVector
).
decltype(intVector)::iterator iter;
Alternativamente:
decltype(intVector.begin()) iter;
En el segundo ejemplo, el tipo de retorno de begin
se usa para determinar el tipo real, que es vector<int>::iterator
.
Si necesitamos un const_iterator, solo necesitamos usar cbegin
:
decltype(intVector.cbegin()) iter; // vector<int>::const_iterator