Как можно умножить chrono
timepoint
на скаляр?Это работает для duration
с, но timepoint
s не может быть умножено на скаляр («ошибка: недопустимые операнды в двоичном выражении»).
Контекст:
У меня есть некоторыекод, который в реальной жизни будет работать долго.В целях тестирования я хочу иметь возможность ускорить его в несколько раз, поэтому все происходит аналогично, но только в ускоренном режиме.
Я думал о создании собственного класса ScaledClock
, который возвращает значения из chrono::steady_clock
, но с параметром масштабирования, который можно установить на значение, большее 1, для ускорения.Вот некоторый код:
steady_clock::time_point ScaledClock::now() {
return steady_clock::now() * speedUp; // <--- error
}
void ScaledClock::sleep_for(steady_clock::duration duration) {
std::this_thread::sleep_for(duration / speedUp);
}
void ScaledClock::sleep_until(steady_clock::time_point time) {
std::this_thread::sleep_until(time / speedUp); // <--- error
}
Если speedUp, например, равен 2, то программа всегда будет думать, что прошло вдвое больше времени.Он также будет спать вдвое дольше.Пока я дисциплинирован о том, чтобы не использовать этот класс для любого времени, я думаю, что он должен работать.
(В качестве альтернативы, если у кого-то есть намного лучший способ достичь этого, я бы хотел услышать это)
Редактировать: копия комментария, потому что я думаю, что это полезное уточнение:
ru.cppreference.com / w / cpp / chrono / time_point:
Шаблон класса std :: chrono :: time_point представляет точку во времени.Он реализован так, как будто в нем хранится значение типа Duration, указывающее временной интервал с начала эпохи часов.
Так что я хочу, чтобы все времена с тех пор, как эпоха удвоилась.Если эпоха не является началом выполнения программы, и мой код думает, что она работает в 4036 году, я не очень обеспокоен