【发布时间】:2017-08-14 23:59:04
【问题描述】:
当然我在这里做了一些愚蠢的事情,但我在编译我的简单秒表类时遇到了麻烦。错误是:
/usr/include/c++/4.9/chrono:246:2:错误:静态断言失败:rep 不能是持续时间
我想将两个 std::chrono::high_resolution_clock 之间的时间差转换为毫秒。我确信这段代码曾经可以工作(错误的记忆或者可能是 2015 年比 2013 年更好的标准)。
#include <iostream>
#include <chrono>
class Stopwatch final
{
public:
using elapsed_resolution = std::chrono::milliseconds;
using elapsed_duration = std::chrono::duration<std::chrono::milliseconds>;
Stopwatch()
{
Reset();
}
void Reset()
{
reset_time = clock.now();
}
elapsed_duration Elapsed()
{
return std::chrono::duration_cast<elapsed_resolution>(clock.now() - reset_time);
}
private:
std::chrono::high_resolution_clock clock;
std::chrono::high_resolution_clock::time_point reset_time;
};
int main(void)
{
auto s = Stopwatch();
std::cout << s.Elapsed().count() << std::endl;
}
【问题讨论】:
-
问题是
using elapsed_duration = std::chrono::duration<std::chrono::milliseconds>;。请阅读docs。顺便说一句,这从现代编译器的错误消息中很明显:wandbox.org/permlink/rOfqAkm9XqvZXpkI -
我想返回一个时间间隔。 elapsed_duration 是一个时间间隔,不是吗?
-
不,正如错误所说,某些持续时间的表示可能不是另一个持续时间。
-
我不明白,主要是因为如果您阅读文档,您会在 duration_cast 示例中看到这一点。
-
抱歉,我找不到上述示例。如果它应该存在,那就错了。