Para mí, una de las razones para considerar seriamente a boost en cualquier proyecto en C++ es su implementación de functores. Realmente facilita mucho la creación de funciones "callback" y "delegates" sin causar mucha penalización en el rendimiento de un programa.
¿Porqué facilita el trabajo si los callbacks bien se pueden hacer con tan solo un apuntador a función? La respuesta es fácil si estas trabajando con un enfoque orientado a objetos. Para usar un apuntador a una función miembro, esta necesita ser estática o ser llamada con ayuda de su objeto. Las dos cosas bastante engorrosas.
Veamos como se sortea estos inconvenientes usando boost:
Cuando estudiaba en la secundaria, me empezaron a enseñar álgebra y trigonometría. Era feliz porque estaba seguro de que con esos conocimientos ya podría representar la realidad en mi recién comprada computadora: podía hacer caer y rebotar una pelota (cuadrada) en la pantalla. También con esos conocimientros seguramente sería capaz de resolver varios problemas de la vida real y fácilmente me podrían dar trabajo.
De un libro, con las formulas del seno y el coseno aprendí a dibujar un reloj analógico y al poco tiempo mis naves espaciales podían hacer no sólo movimientos rectos sino ahora circulares.
Reloj de un libro de Geoff Phillips
Pero al saber que las computadoras manejaban sus numeros en representaciones binarias, me surgió la duda de cómo le hacian para calcular esas funciones trigonométricas. Normalmente, cuando yo no usaba la calcualdora, obtenía los valores del seno y el coseno con unas tablas...
Incluso a mis 13 años, era evidente para mí que la computadora no tenía las tablas capturas; porque los resultados los daba razonablemente exactos sin importar los decimales que pusiera como ángulo. Mi maestro de matemáticas resolvió mi duda diciendo que se aproximaban con series infinitas y me dio los ejemplos de mis funciones favoritas con una leve explicación que finalizó comentando que cuando fuera "grande" las iba poder calcular por mi cuenta... ¡claro!, si seguía estudiando matemáticas.
En esos momentos no me imaginaba que dentro de esas series misteriosas, había mucha teoría atrás de como abstraemos al mundo con nuestras herramientas en papel, en la computadora e incluso en nuestra mente. No sospechaba que el universo era más complejo de lo que pensaba y que las herramientas que conocía en la secundaria no eran nada aún.
Inevitablemente, tenía que cruzar algunas barreras para entender muchos de los conceptos abstractos y locos que envuelven a nuestro universo ( como que pueden caber espacios infinitos en lugares finitos, por citar el más trillado) pero también surgiría la semilla de la duda de que tanto podemos manejar esa complejidad y hasta que nivel la podemos representar.
Pero fue ahí, con esa pregunta inocente, donde se creó esa barrera que esperó pacientemente a que estudiara más, de la misma forma que lo hizo antes la barrera del álgebra y la trigonometría. Mi maestro de matemáticas tenía mucha razón... tuvo que pasar algo de tiempo.
La biblioteca TinyXML es muy liviana y permite parsear rapidamente XMLs sin tener que hacer mucho formalismo. En este post presento un código de ejemplo:
El xml que queremos parsear como ejemplo es el siguiente: