【发布时间】:2021-10-07 21:01:43
【问题描述】:
我刚刚在<chrono> 上观看了Howard Hinnant's talk,似乎虽然您可以创建自定义durations,但它们在编译时需要一个固定的比率。他举的例子是:
using frames = duration<int32_t,ratio<1,60>>;
这会创建一个名为frames 的duration,其比率为 1 到 60。(换句话说,视频帧速率为每秒 60 帧)。
但是,如果我想创建一个具有可在运行时更改的可变比率的 duration,该怎么办?
假设我想制作具有用户可配置每分钟节拍的音乐软件。我想做这样的事情:
uint32_t nTempo {120};
using beats = duration<int32_t,ratio<1,nTempo>>;
while(running){
// The user is turning an encoder that changes the ratio between beats and minutes.
nTempo = ReadBPMEncoderValue();
// Calculate the number of beats in 45 seconds plus 4 beats,
// based on the current tempo:
beats x = 45s + beats{4};
}
有没有办法从<chrono> 获得这个功能?我需要编写自定义扩展吗?还是有更好的方法?
【问题讨论】:
-
简答:不。模板参数必须在编译时知道。