Я писал класс, который имел дело с дополнительными временными ограничениями для определенных методов, и поэтому он берет классы из 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_cast
использовать steady_clock
и это до сих пор всегда дает мне system_clock
, Это действительно раздражает, учитывая, что теперь класс полностью непригоден, когда steady_clock
используется вместо system_clock
, Если steady_clock
а также system_clock
фактически одно и то же, есть ли какой-то способ, которым мне не хватает, чтобы конвертировать время между двумя?
Изменить: я использую Visual Studio Professional 2012. Кроме того, он появляется steady_clock
происходит от system_clock
Хотя это, кажется, не помогает в данный момент.
Задача ещё не решена.