如何让c ++ chrono steady_clock停止返回system_clock次?

时间:2014-05-15 05:49:55

标签: c++ chrono system-clock c2664

我正在编写一个处理某些方法的可选时间约束的类,因此它需要std::chrono命名空间中的类来指定如何定义时间。我试图测试一旦它通过给定time_point后应该过期的方法:

template <typename Clock, typename Rep, typename Per>
class Foo
{
public:
    bool bar(const std::chrono::time_point<Clock, std::chrono::duration<Rep, Per>>&);
};

在我第一次尝试调用该方法失败后,我意识到我应该使用std::chrono::time_point_cast。方法调用如下:

Foo<std::chrono::steady_clock, long long, std::milli> obj;
obj.bar(std::chrono::time_point_cast<std::chrono::duration<long long, std::milli>(std::chrono::steady_clock::now()));

我收到此IntelliSense错误:

IntelliSense: no suitable user-defined conversion from "std::chrono::time_point<std::chrono::system_clock, std::chrono::duration<long long, std::milli>>" to "const std::chrono::time_point<std::chrono::steady_clock, std::chrono::duration<long long, std::milli>>" exists

当我尝试编译它时,我得到:

error C2664: 'Foo<Clock,Rep,Per>::bar' : cannot convert parameter 1 from 'std::chrono::time_point<_Clock,_Duration>' to 'const std::chrono::time_point<_Clock,_Duration> &'

我不知道为什么,但time_point返回的steady_clock是使用system_clock的time_point。我甚至专门设置time_point_cast使用steady_clock,它仍然总是给我system_clock。考虑到现在使用steady_clock代替system_clock时类完全无法使用,这真的很烦人。如果steady_clocksystem_clock实际上是相同的,那么我是否有某种方法可以将两者之间的时间转换成一个?

编辑:我正在使用Visual Studio Professional 2012.此外,steady_clock显示system_clock来自{{1}},但目前似乎没有帮助。

0 个答案:

没有答案