期间必须是C ++ 17 chrono库中的比例专业化?

问题描述 投票:2回答:1

我显然太愚蠢了,不能使用C ++ 17 <chrono>库。编译以下内容......

#include <chrono>
#include <iostream>

int main() {
    using clock = std::chrono::steady_clock;
    using duration = std::chrono::duration<double, std::chrono::seconds>;
    using timepoint = std::chrono::time_point<clock, duration>;
    timepoint t0 = clock::now();
    for (int i = 0; i < 1000; i++) {
        timepoint t = clock::now();
        duration d = t-t0;
        double seconds = d.count();
        std::cout << seconds << std::endl;
    }
}

我明白了......

/usr/include/c++/8/chrono:319:16: error: static assertion failed:
                                  period must be a specialization of ratio
      static_assert(__is_ratio<_Period>::value,
                    ^~~~~~~~~~~~~~~~~~~

有任何想法吗?

c++ c++17 chrono
1个回答
5
投票

std::chrono::duration的第二个类型参数需要是一个比率(每秒的滴答数),而不是另一个持续时间(参见https://en.cppreference.com/w/cpp/chrono/duration)。 std::chrono::seconds是一个持续时间。你想要这个:

using duration = std::chrono::duration<double, std::ratio<1> >;

仅供参考,std::chrono::seconds基本上是std::chrono::duration<some integer type, std::ratio<1> >;你的持续时间类型有点像seconds但有浮点数而不是整数。

© www.soinside.com 2019 - 2024. All rights reserved.