1

我正在编写一个处理某些方法的可选时间约束的类,因此它从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是一个使用的 time_point system_clock。我什至专门设置了time_point_cast使用steady_clock,它仍然总是给我system_clock。这真的很烦人,考虑到现在这个类steady_clock在代替system_clock. 如果steady_clock并且system_clock实际上是同一件事,我是否缺少某种方式来转换两者之间的时间?

编辑:我正在使用 Visual Studio Professional 2012。此外,它似乎steady_clock源自system_clock,尽管目前这似乎没有帮助。

4

0 回答 0