我有一段时间
typedef std::chrono::high_resolution_clock Clock;
Clock::time_point beginTime;
Clock::time_point endTime;
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(endTime - beginTime);
我在duration
获得std::chrono::milliseconds
。但我需要duration
作为float
或long long
。怎么做?
答案 0 :(得分:7)
template< class Rep, class Period = std::ratio<1> > class duration;
类模板std :: chrono :: duration表示时间间隔。它 由Rep类型的刻度和刻度周期组成,其中 tick period是一个代表时间的编译时有理常数 从一个刻度到下一个刻度的秒数。
和
count
返回刻度计数
因此,持续时间存储指定时间段内的多个刻度,count
将使用基础表示类型返回该数字。因此,如果持续时间的表示为long long
,且句点为std::milli
,则.count()
将返回等于持续时间所代表的毫秒数的long long
通常,您应该避免使用float
或long long
等弱类型来表示持续时间。相反,你应该坚持使用'rich' types,例如std :: chrono :: milliseconds或std :: chrono :: duration的适当特化。这些类型有助于正确使用和可读性,并通过类型检查帮助防止错误。
滑动18
未指定/过于笼统:
- void increase_speed(double);
- 对象obj; ... obj.draw();
- Rectangle(int,int,int,int);更好: - void increase_speed(速度);
- 形状和S; ... s.draw();
- 矩形(Point top_left,Point bottom_right);
- 矩形(Point top_left,Box_hw b);
std::chrono
is&#34;物理量库的一致子集,仅处理时间单位,仅处理指数等于0和1的那些时间单位。&#34; < / p>
如果您需要处理大量时间,您应该利用此库,或者提供更完整的单位系统的库,例如boost::units。
极少数情况下,数量必须降级为弱类型值。例如,当必须使用需要此类型的API时。否则应该避免。
答案 1 :(得分:1)
作为float
回答。
std::chrono
的持续时间typedef是整数。但是,duration
班级可以接受float
。
查看我的duration
typedef:
https://github.com/faithandbrave/Shand/blob/master/shand/duration.hpp
...
template <class Rep>
using seconds_t = std::chrono::duration<Rep>;
using seconds_f = seconds_t<float>;
using seconds_d = seconds_t<double>;
using seconds_ld = seconds_t<long double>;
template <class Rep>
using minutes_t = std::chrono::duration<Rep, std::ratio<60>>;
using minutes_f = minutes_t<float>;
using minutes_d = minutes_t<double>;
using minutes_ld = minutes_t<long double>;
...
这些持续时间的使用在这里:
#include <iostream>
#include <shand/duration.hpp>
int main()
{
std::chrono::seconds int_s(3);
shand::minutes_f float_m = int_s; // without `duration_cast`
std::cout << float_m.count() << std::endl; // 0.05
}