boost :: chrono :: time_point<>之间的区别和boost :: chrono :: steady_clock :: time_point

时间:2012-10-24 04:01:40

标签: c++ boost types time

boost::chrono::steady_clock::time_pointboost::chrono::time_point<boost::chrono::steady_clock,Duration>之间有什么区别,为什么不能在彼此之间进行转换?

这似乎非常多余。

2 个答案:

答案 0 :(得分:3)

如果持续时间相同,则可以在彼此之间进行转换。例如,以下情况可以正常:

boost::chrono::steady_clock::time_point tp1 = boost::chrono::steady_clock::now();
boost::chrono::time_point<boost::chrono::steady_clock, 
                              boost::chrono::nanoseconds>
tp2 = tp1;

如果持续时间不同,您还可以使用time_point_cast将一个time_point投射到另一个time_point。

示例

boost::chrono::steady_clock::time_point tp1 = boost::chrono::steady_clock::now();
boost::chrono::time_point<boost::chrono::steady_clock,
                              boost::chrono::milliseconds> 
tp2 = boost::chrono::time_point_cast<boost::chrono::milliseconds>(tp1);

另外,我不确定你为什么认为它们是多余的。如果您查看docssteady_clock会有以下成员:

typedef chrono::time_point<steady_clock> time_point;

因此,boost::chrono::steady_clock::time_point只是boost::chrono::time_point<steady_clock>的typedef。

答案 1 :(得分:1)

std::chrono::time_point(基于Boost)是一个模板,可用于定义一个类,该类又可用于定义某个时间点。 std::chrono::steady_clock::time_point是该模板(即类)的实例化,可用于定义时间点。所以他们是两个相同名称的不同的东西。叹息。

std::chrono::time_point的各种实例化可以像@JesseGood所指出的那样,与time_point_cast进行相互转换。