2012-09-25 27 views
6

Conceptualmente me parece que el uso de tipos basados ​​unidad que hace cumplir (Medidores, segundos, Kilogramos) tendría beneficios masivos (comprobación adicional, de paso, args, deshacerse de los nombres de las unidades en Vars, etc) y todavía tengo no se encuentra con tanto código que sí. Y el código que he visto que hace ha usado tipos personalizados.¿Hay alguna razón para no usar los tipos de aplicación de la unidad?

veo que tiene una biblioteca impulso unidades (boost :: unidades simplemente suficiente) y, sin embargo, no veo mucha evidencia de que sea ampliamente utilizado (en una búsqueda básica google).

¿Hay una buena razón para esto?

Juntos, estos parecen implicar que debe haber alguna razón por la cual la práctica no se haya adoptado tan ampliamente como yo esperaba. Tal vez más problemas de lo que valen por alguna razón?

Y por lo que pido:

¿Hay una razón para no usar la unidad de la aplicación de tipos? ¿Y específicamente hay razones para no usar boost :: units?

Respuesta

6

Creo que la razón principal por la cual esta técnica no es más frecuente es que es terriblemente difícil y engorroso deletrear y leer.

espero que esto finalmente convertirse en un estilo de programación más aceptada con C++ 11, que añade literales definidos por el usuario a la lengua que le permiten escribir:

auto acc = 10_m/1_s/1_s; 

en lugar del tradicional

myframework::units::si<acceleration>::type acc = myframework::unit_cast<units::meters>(10.0) 
/myframework::unit_cast<units::seconds>(1) 
/myframework::unit_cast<units::seconds>(1); 
+0

Oh, muy agradable. No estaba al tanto de esa característica en C++ 11. – Catskul

+0

¿No podría resolverse mucho con unos pocos typedefs? – Catskul

+0

@Catskul: Realmente no se puede evitar una cierta cantidad de verbosidad. Eche un vistazo a Boost.Units y vea qué tan bien le va a una solución "diseñada profesionalmente". Yo diría que todavía es mucho más ruidoso de lo que la mayoría de los programadores estarían dispuestos a aguantar. –

3

He usado esta biblioteca para gran beneficio al escribir el código correcto. Lamentablemente, es unas 10 veces más difícil de usar de lo que debería ser. Sin embargo, todavía vale la pena, ya que hacer un seguimiento de las dimensiones y las unidades es una pesadilla.

La biblioteca de unidades de refuerzo es muy inteligente, potente y completa. El problema es que la documentación es prácticamente ilegible. Hay muchos problemas con nombres confusos, sin requisitos de tipo. Los autores incluyeron muchos ejemplos que son útiles, pero no sustituyen a un documento mejor construido.

FYI - presenté un tutorial sobre este mismo tema en CPPcon 2015. Se puede encontrar en https://www.youtube.com/watch?v=qphj8ZuZlPA

Cuestiones relacionadas