我发现 std::chrono
有点令人困惑和阻碍。我想使用实值毫秒并最终得到诸如 0.7 或 6.45 或 13.3 之类的值,我可以将其视为 double
值。
我真的只想从两个 time_point
值开始,并将它们之间耗时返回为 double
。如何?这不起作用:
using std;
using std::chrono;
high_resolution_clock::time_point t1( high_resolution_clock::now() );
// spend some time doing something...
high_resolution_clock::time_point t2( high_resolution_clock::now() );
const duration<double,milli> elapsedTime( t2 - t1 );
const double timeAsDouble( static_cast<double>( elapsedTime ) ); // no conversion available :-(
// go on to use or return timeAsDouble;
重要约束:我特别不想使用 std::chrono::duration<double,std::milli>
类型的值。为什么不?因为我会立即对我想要使用的值进行平方。当我对 double
求平方时,我知道它是通用类型,这意味着它只处理数字,而不处理单位。因此,我必须自己明确地处理这些单位(例如,通过在变量名称中明确它,即使这很容易出现失误)。
但如果我想对 std::chrono::duration<double,std::milli>
进行平方,我会在单位或代码清晰度方面打开一 jar 蠕虫。无论如何,没有定义 *
运算符来将此类与其自身相乘,因此下面示例中的第二行通过根本不编译来避免有关其单位和类型的问题:
auto timeSpan( duration<double,std::milli>( 0.8 ) );
auto spanSquared( timeSpan*timeSpan ); // ???
那么,将看起来应该是 double
... 的内容转换为 double
的简单方法是什么?
最佳答案
也许您正在寻找std::chrono::duration<...>::count()
?
此外,值得一提的是,缺少乘法运算符的原因非常明显:当您乘以值时,您也会乘以单位,例如10 秒 x 10 秒 = 100 平方秒。这反过来会导致无数问题,例如单位转换(例如1平方秒= 1000000平方毫秒,而不是1000),这远远超出了 std::chrono 的预期范围对于。
关于c++11 - 如何将 std::chrono::duration<double,std::milli> 转换为 double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39159199/