Я читал этот отличный ответ, в котором использовалась единица времени комического времени microfortnights
, чтобы продемонстрировать хороший момент незабываемым образом.
typedef std::ratio<756, 625> microfortnights;
std::chrono::duration<int, microfortnights> two_weeks(1000000);
И возник вопрос:
Если бы я действительно хотел это сделать (скорее, некоторые другие нетривиальные продолжительность, такая как время, доступное во время кадра, или во время N циклов процессора), что это лучший способ сделать это?
Я знаю, что ratio<N, D>
создаст уникальный тип, связанный с каждым значением N
и D
. Итак, ratio<4, 6>
- это другой тип, чем ratio<2, 3>
, хотя они представляют одну и ту же (уменьшенную) долю. Должен ли я всегда делать математику, чтобы упростить коэффициент преобразования до сокращенных сроков?
Было бы удобнее написать:
using microfortnights = std::chrono::duration<long, ratio<86400*14, 1000000>>;
вместо:
using microfortnights = std::chrono::duration<long, ratio<756, 625>>;
Но тогда это будут два разных типа, а не один и тот же. Первое выражение легче проверить на правильность. Но есть много представлений этой фракции, а вторая, возможно, является канонической и, следовательно, предпочтительной. Если у меня слишком много типов, блуждающих по моей программе, которые на самом деле представляют одну и ту же единицу, то это может привести к ненужному раздуванию кода шаблона.