Re[14]: В поисках семантической корректности
От: CrystaX Россия https://crystax.me/
Дата: 23.05.05 07:46
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Да, решение с traits — симпатичное. Единственное пожелание — чтобы не писать множитель для каждого типа, а выводить их из базисных.

К>
К>template<int M, int L, int T, int Q // размерность: масса,длина,время,заряд
К>         class S1, class S2 // тэги систем
        >>
К>struct unit_traits
К>{
К>  static double scale()
К>  { static s = pow(unit_traits<1,0,0,0,S1,S2>::scale(),M)
К>             * pow(unit_traits<0,1,0,0,S1,S2>::scale(),L)
К>             * pow(unit_traits<0,0,1,0,S1,S2>::scale(),T)
К>             * pow(unit_traits<0,0,0,2,S2,S3>::scale(),Q);
К>    return s;
К>  }
К>};
К>// и соответствующие специализации для ортов
К>


1. У меня они как раз и выводятся из базисных. Или я неверно понял?
2. Здесь, насколько я понимаю, вычисление производится в run-time. У меня в первом варианте — в compile-time. Хотя, наверное, можно ввести метафункцию pow...

Надо подумать. Причина введения числителя и знаменателя отдельно была в том, что нельзя использовать статические константы типа double. Но конечно, если как следует подумать, наверняка можно что-нибудь соорудить...

К>Кстати, для внесистемных единиц (наподобие температуры в кельвинах или мощности в лошадиных силах) придётся тоже что-то придумывать.


Ну, в данном случае это не проблема. Вводим еще одну систему единиц (например, SystemExt) и дело в шляпе!
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.