我正在编写一个处理某些方法的可选时间约束的类,因此它需要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_clock
和system_clock
实际上是相同的,那么我是否有某种方法可以将两者之间的时间转换成一个?
编辑:我正在使用Visual Studio Professional 2012.此外,steady_clock
显示system_clock
来自{{1}},但目前似乎没有帮助。