我正在编写一个处理某些方法的可选时间约束的类,因此它从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
,尽管目前这似乎没有帮助。