C++ 将std::chrono时间点乘以标量

C++ 将std::chrono时间点乘以标量,c++,time,chrono,scalar,C++,Time,Chrono,Scalar,一个人怎么能用一个标量乘以一个chronotimepoint?它适用于durations,但timepoints不能与标量相乘(“错误:二进制表达式的操作数无效”) 背景: 我有一些在现实生活中会运行很长时间的代码。出于测试的目的,我希望能够通过一个因子来加速它,这样所有事情都会以类似的方式发生,但只是以快进的方式 我想创建自己的ScaledClock类,该类返回chrono::staid\u clock中的值,但带有一个可设置为大于1的缩放参数以实现加速。下面是一些代码: steady_clo

一个人怎么能用一个标量乘以一个
chrono
timepoint
?它适用于
duration
s,但
timepoint
s不能与标量相乘(“错误:二进制表达式的操作数无效”)

背景: 我有一些在现实生活中会运行很长时间的代码。出于测试的目的,我希望能够通过一个因子来加速它,这样所有事情都会以类似的方式发生,但只是以快进的方式

我想创建自己的
ScaledClock
类,该类返回
chrono::staid\u 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
}
稳定时钟::时间点缩放时钟::现在(){

return stational_clock::now()*加速;//您需要存储一个起始点(now(),例如在程序开始时),然后确定从该起始点开始经过的时间作为持续时间。然后您可以将该持续时间乘以您的因子添加到起始点,并将其作为时间点返回到
ScaledClock::now()中
函数。如下所示:

#include <chrono>
#include <unistd.h>

int main() {

  auto start = std::chrono::steady_clock::now();

  sleep(1);

  auto actualNow = std::chrono::steady_clock::now();
  auto timePassed = actualNow - start;
  auto timePassedScaled = timePassed * 2.0;
  auto scaledNow = start + timePassedScaled;

  return 0;
}
#包括
#包括
int main(){
自动启动=标准::时钟::稳定时钟::现在();
睡眠(1);
auto actualNow=std::chrono::Standy_clock::now();
auto timePassed=actualNow-启动;
auto timePassedScaled=timePassed*2.0;
auto scaledNow=开始+时间经过缩放;
返回0;
}

你不能用一个标量乘以一个时间点(一个时刻或一个瞬间)。例如,将6pm乘以3意味着什么?乘(或除)一个特定的时间点真的没有意义。如果你有日期2018-09-05和时间13:14:53.0,那么乘以例如2意味着什么?将其提前到4036年?我知道时间点表示从给定的开始时间(可能是程序执行的开始)起经过的时间。这样,相乘应该是有意义的(即,从起点开始的时间是起点的两倍)。从某个时间点开始经过的时间是一个持续时间。缩放持续时间是有意义的。缩放时间点本身没有意义。您可以从某个时间点开始相乘持续时间(虽然比历元更接近现在)。ScaledClock“开始”的另一个方法可以将“时间点”设置为now,然后ScaledClock::now(0可以返回real now+(real now-开始时间点)*2当然,如果你真的想在虚拟的遥远未来运行你的程序,你也可以使用纪元的开始作为开始。谢谢。对于浮点标量乘法,这会将时间点转换为双精度表示。我如何防止这种情况发生,或是将它恢复为稳定的时钟::时间点
?这似乎可行,但不可行bersome:
auto timePassedScaled=duration_cast(timePassed*2.0);
我认为应该在乘法中省略“.0”。是的,但我实际上想要自由使用浮点数,比如2.5(我使用的是双变量,
加速比,而不是像
2.0
)这样的硬编码数字)。