Estoy usando una gran cantidad de código STL
con std::for_each
, bind
, y así sucesivamente, pero me di cuenta de que a veces el uso de STL
no es una buena idea.¿Cuánto de STL es demasiado?
Por ejemplo, si usted tiene un std::vector
y quiere hacer una acción en cada elemento del vector, su primera idea es utilizar esto:
std::for_each(vec.begin(), vec.end(), Foo())
y es elegante y bien, por un tiempo. Pero luego viene el primer conjunto de informes de fallas y usted tiene que modificar el código. Ahora debe agregar el parámetro para llamar Foo()
, por lo que ahora se convierte en:
std::for_each(vec.begin(), vec.end(), std::bind2nd(Foo(), X))
pero eso es sólo una solución temporal. Ahora el proyecto está madurando y usted entiende la lógica empresarial mucho mejor y desea agregar nuevas modificaciones al código. Es en este punto que se da cuenta de que debe usar el bien anterior:
for(std::vector::iterator it = vec.begin(); it != vec.end(); ++it)
¿Esto me está sucediendo solo a mí? ¿Reconoces este tipo de patrón en tu código? ¿Ha experimentado patrones similares usando STL
?
Por cierto, si en su segundo ejemplo, "X" es el mismo para todos los elementos. Solo pásalo al constructor de Foo y guárdalo en el funtor en lugar de unirlo. Mucho más simple –
En realidad, no está utilizando ninguna de las STL, por lo que está a salvo :) –
Solo una opinión, pero "demasiado" es cuando utiliza funciones que no necesita únicamente para usarlas. Si es útil, úselo. Si le preocupan los nombres excesivamente largos, siempre puede usar un alias typedef o namespace para acortarlos (por ejemplo, 'typedef std :: vector :: iterator VecIter;'). Lo que ocurre con la biblioteca estándar es que, por lo general, es la forma más limpia de crear un compilador en un caso general, simplemente porque los creadores del compilador o las personas que mejor lo conocen (si no los creadores) escribirán su implementación. No tengas miedo de usarlo cuando sea útil. –