给定一个std::chrono::sys_seconds time
,我们可能期望用如下的语句从它的时钟中重新分配time
:
time = decltype(time)::clock::now();
但是,这很可能会失败,因为decltype(time)::clock::duration
与decltype(time)
没有任何关系,而是一个预定义的单位(可能比seconds
更细),因此您必须手动将其转换为一个更粗的单位。
这意味着您需要编写如下内容:
time = std::chrono::time_point_cast<decltype(time)::duration>(decltype(time)::clock::now());
所以我的问题是,是否有更短的语法来实现这一点?
2条答案
按热度按时间bxjv4tth1#
一个明显解决方案是编写您自己的函数
您还可以进行一些花哨重载
i1icjdpr2#
如果您在泛型上下文中不知道
time
的精确类型,那么我发现为clock
和duration
设置using声明很方便:我选择
floor
作为舍入模式(总是向下),这样在历元之前和之后的行为是一样的。一些时钟的当前时间可以在历元之前,比如gcc上的file_clock
。但是如果你喜欢向零截断,time_point_cast
也可以。