为什么boost::time_duration不实现乘以实数?

Why boost::time_duration doesn't implement multiplication by a real number?

在一个巨大的计算环境下,我在计算过程中估计了计算时间的总时间。为此,我将我的时间与开始时间进行比较以获得持续时间,并将其除以已经计算出的比率。但我很惊讶:没有 operator * (boost::time_duration, double) 存在!

查看我希望编写的示例:

boost::posix_time::ptime t0 = boost::posix_time::microsec_clock::local_time();
for(unsigned long int i = 0; i < num_iterations; ++i)
{
  //
  // An iteration of my algorithm
  //

  boost::posix_time::ptime t = boost::posix_time::microsec_clock::local_time();
  boost::posix_time::time_duration d = t - t0;
  boost::posix_time::time_duration expected_d = d * ((double)n / (double)i);
}

唯一可用的运算符是 operator * (boost::time_duration, int)。我的问题是为什么?有充分的理由不实现小数乘法吗?在 boost 命名空间中自己实现它是一种不好的做法吗?

您可以在 boost 命名空间中实现它,但这远非最佳实践。

我认为 boost 开发人员有充分的理由不将浮点除法和乘法包含到 posix_time::time_duration。这可能与 posix 次的内部表示有关。为什么不用通常的方法做整数除法呢?

boost::posix_time::time_duration d = t - t0;
boost::posix_time::time_duration expected_d = (n * d) / i;