lundi 30 septembre 2013

Auto

Enfin, mon premier accrochage sur le mot-clé auto! Je sentais bien venir le truc qu'on allait me reprocher mon enthousiasme à l'utiliser.

Ma première utilisation n'avait gêné personne:

auto it = _collection.begin();
auto end = _collection.end();
for(; it != end; ++it)
{
   ...
}

Ne pas avoir à écrire des types à ralonge genre std::map<int, std::shared_ptr<Item> >::const_iterator est vraiment pratique, et rend l'utilisation d'itérateurs presque agréable (pas autant qu'un bon range-based for...).

Ma deuxième utilisation était à peine plus contestable:

auto item = std::make_shared<Item>();

Là, le type est extrêmement clair puisqu'il est indiqué à droite de l'expression. Ce serait plutôt écrire std::shared_ptr<Item> item = std::make_shared<Item>() qui serait redondant!

Par contre, ma troisième utilisation concernait le type de retour un peu compliqué d'une fonction.

auto items = getItemCollection();

Là, ça bloquait... Je trouve bien plus pratique de coller un type auto ici. Mon type est complexe et peut changer. Si je me contente d'itérer sur mes items, je peux changer mon type de retour d'un vecteur à une liste ou un set sans avoir à changer le code appelant. Mais manifestement, c'était pousser le bouchon un peu loin!

J'en appelais à de plus hautes autorités, et envoyais le lien vers le Almost Always Auto d'Herb Sutter. Je crois avoir gagné la première manche, mais ce n'est que partie remise.

Aucun commentaire: