Comments 20
Я-то наивно полагал, что вы при помощи C++11 предложите красивое решение поставленной проблемы. Но:
явно нельзя назвать красивым и понятным решением. Уж лучше:
А вообще, комментарии перед определением метода / функции, поясняющие значение параметров — наше все. На мой взгляд.
Acceleration acc1 = Value<Unit<1, 0, -2> >(2); // Ускорение = 2 м/с/с. Ошибки нет.
явно нельзя назвать красивым и понятным решением. Уж лучше:
Speed sp =100m/20s;
А вообще, комментарии перед определением метода / функции, поясняющие значение параметров — наше все. На мой взгляд.
+7
По поводу комментария. Если вы решите изменить назначение параметров, то вам придется править комментарий. Об этом часто забывают, и комментарий становится источником ошибок при использовании вашего кода (про это писал вроде С. Макконелл в книге «Совершенный код»).
0
Начинать надо было с литералов, а не в P.S. о них писать,
За подобные конструкции в коде:
надо наказывать.
А за подобные:
убивать.
Не поймите меня неправильно.
За подобные конструкции в коде:
Acceleration acc = Value<M>(100) / Value<S>(10) / Value<S>(1);
надо наказывать.
А за подобные:
Acceleration acc1 = Value<Unit<1, 0, -2> >(2);
убивать.
Не поймите меня неправильно.
+10
typedef Value<Unit<1, 0, -1> > Speed
Как бы в C++11 уже можно и >> писать, без пробела.
PS: не увидел в статье «best practice». На что смотреть-то?
+4
И тут врывается F# с units of measure:
[<Measure>] type m
[<Measure>] type s
> let accl = 10.0<m/s^2>;;
val accl : float<m/s ^ 2> = 10.0
> let sp = 100.0<m/s>;;
val sp : float<m/s> = 100.0
-1
Какой-то лютый песец на шаблонах… лучше уж
increaseSpeed(double speed_ms)
overengineering во все поля(
increaseSpeed(double speed_ms)
overengineering во все поля(
+4
Вообще-то Страуструп в своём выступлении говорит, что такой приём с шаблонами для единиц измерения доступен в C++ уже 10 лет, но он широко не использовался из-за неудобства, это же просто нечитаемый код. Зато с выходом C++11 и появлением пользовательских литералов, есть возможность записывать это всё в человеческом виде и широко использовать.
+2
С создания таких величин и начинается изучение великолепной вещи – boost mpl
www.youtube.com/watch?v=RupZW2Zcfwg&feature=youtu.be
www.youtube.com/watch?v=RupZW2Zcfwg&feature=youtu.be
0
Простите, вот ссылка правильная www.boost.org/doc/libs/1_49_0/libs/mpl/doc/tutorial/dimensional-analysis.html
Хотя ту тоже не плохо было бы посмотреть.
Хотя ту тоже не плохо было бы посмотреть.
0
Видели бы вы, чем это заканчивается…
+2
Вы изобрели boost::units:
Причем, применять такое стоит разве что в сложных физических расчетах — чтобы не ошибаться в формулах.
quantity<length> L = 2.0*meters; // quantity of length
quantity<energy> E = kilograms*pow<2>(L/seconds); // quantity of energy
Причем, применять такое стоит разве что в сложных физических расчетах — чтобы не ошибаться в формулах.
0
Sign up to leave a comment.
Type-rich Programming