Vous ne savez pas exactement ce que vous entendez par "frais généraux". Si cela simplifie la façon dont vous écrivez votre code, utilisez-le, sinon tenez-vous en à la main.
S'il n'est utilisé que dans une portée restreinte, placez typedef dans la même portée. Ensuite, il n'a pas besoin d'être publié, ou documenté, ou apparaître sur les diagrammes UML. Par exemple (et je ne prétends pas que ce soit le meilleur code jamais à d'autres égards):
int totalSize() {
typedef std::map<Key, Value> DeDuplicator;
DeDuplicator everything;
// Run around the universe finding everything. If we encounter a key
// more than once it's only added once.
// now compute the total
int total = 0;
for(DeDuplicator::iterator i = everything.begin(); i <= everything.end(); ++i) {
total += i->second.size(); // yeah, yeah, overflow. Whatever.
}
return total;
}
La combinaison avec la suggestion de Ferruccio (si vous utilisez boost), la boucle devient:
BOOST_FOREACH(DeDuplicator::pair p, everything) {
total += p.second.size();
}
Et en combinant avec la suggestion de bk1e (si vous utilisez C++ 0x ou avec des fonctionnalités de celui-ci), et en supposant que BOOST_FOREACH interagit avec auto de la manière dont je pense qu'il devrait basé sur le fait qu'il peut normalement gérer les conversions implicites types:
std::map<Key, Value> everything;
// snipped code to run around...
int total = 0;
BOOST_FOREACH(auto p, everything) {
total += p.second.size();
}
Pas mal.
Bien joué! Votre dernier est au niveau de Python en compacité * et * lisibilité. – rlerallut
Et pourrait même courir plus vite. –