A Coder’s Corner

Blog de tecnologia y programación

Decltype y auto

Posted by gfaraj on May 6, 2007

Dos keywords se van a introducir al nuevo estandar de C++: decltype y auto. Estos dos keywords serviran para poder deducir el tipo de una expresion, cosa que no se puede hacer en el estandar de ahora. Aqui hay un ejemplo de decltype:

int a;
bool& b;

int foo(float);

decltype(a)          // int
decltype(b)          // bool&
decltype(foo)        // int (float)
decltype(foo(1.0f))  // int
decltype(1+3)        // int

El operador decltype crea un tipo analogo al que se crea usando typedef. Este operador ayudará bastante a que la programación generica sea mas fácil y poderosa, ya que sin saber de que tipo son a y b, podemos saber de que tipo es una expresion como a + b usando decltype(a+b). El operador auto ayudará en situaciones similares también. Veamos un ejemplo.

auto a = 10;       // int a = 10;
auto b = a + 2.3;  // double b = a + 2.3;

std::vector<int> vec;
for (auto it = vec.begin(); it != vec.end(); ++it)
   std::cout << *it << endl;

En el ultimo ejemplo se puede apreciar un poco la utilidad de este operador, nos ahorra la necesidad de escribir tipos muy largos y sirve para darle un poco de limpieza al codigo. En vez de auto it = vec.begin() hubiera tenido que ser std::vector<int>::iterator it = vec.begin(). El operador auto se podria implementar en terminos del operador decltype. Por ejemplo:

// int a = 10;
auto a = 10;
decltype(10) a = 10;

// std::vector<int>::iterator it = vec.begin();
auto it = vec.begin();
decltype(vec.begin()) it = vec.begin();

Pero podrian ver que el uso de decltype en esos casos resulta en duplicación de codigo, asi que usar auto conviene mas en estos casos. A los que les interesa saber más sobre estas nuevas caracteristicas, entren aqui para ver un resumen de lo ultimo que esta pasando. Tambien, aqui hay una lista de los articulos que se publican.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: