我正在编写一个 C++ 库,它处理包含一些时间值的数据 - 这些值不是源自运行该库的系统。我想将这些值放入 中std::chrono::time_point
(将向库的用户公开)。
现在,要做到这一点,我需要指定一个Clock
类型。好的,那应该不是问题,对吧?我可以满足所有的要求,不是吗?...嗯,不,不是真的,我有一个障碍:now()
功能。我无法now()
为生成我正在查看的时间点值的系统提供值!我无法访问它,也许它不再存在;它可能已经停止,或被重置,或完全不复存在。
这是否意味着我不应该使用std::chrono
类型?或者我应该创建一个时钟类型,其now()
函数返回一个固定的虚拟值?或者人为增加值?
C++20 版本包含一个没有功能
<chrono>
的时钟,事实上,它里面什么都没有:now()
local_t
是一种时钟,有点像。它用于定义time_point
称为 的 s系列local_time
。本地时间不指代特定时间实例,直到与 配对time_zone
。local_t
不符合Cpp17Clock 要求。然而模板中没有要求满足Cpp17Clock 要求
Clock
。否则不可能存在。local_t
那么当您尝试说:
?
您收到编译时错误。这意味着您不能
local_time
在调用中使用,sleep_until
例如,因为sleep_until
需要满足Cpp17Clock 要求。time_point
clock
直到 C++20 才对时钟要求放宽
time_point
,这显然是为了引入local_time
。然而,在 C++20 之前,对更严格的要求time_point
也从未得到执行。因此从实用的角度来看,在 C++20 之前,您可以充分利用这些放宽的要求。编辑:现在我明白了,我们正在使用一个库,不,这是不合法的。我最初的回复解释了原因。
这些是标准库的期望,而不是该范围之外的某些代码的期望。但是,应该期望任何可以在其自身之外使用的库代码都符合这些要求,以便让使用它的人更容易。然而,在内部,这并不那么重要(尽管如此,还是值得努力的)
所以,除非你正在编写一个将其传回给用户(程序员)的库,否则这不是问题。
但是,您应该研究其他可能性,确保无法实现 .now() 函数,如果没有找到未实现 .now() 的文档以及原因解释,并且如果可能的话,确保在尝试使用时显示正确的错误。
更简洁的回答取决于上下文。如果它是内部的、可维护的、易于解释的,那么就可以了。如果它可以变成外部的、不可解释的、不可维护的,那么不行。寻找其他方法。