将双 chrono::秒转换为毫秒

问题描述 投票:0回答:1

我有简单的功能,比如

void foo(std::chrono::milliseconds ms) {
    std::cout << ms.count() << " milliseconds" << std::endl;
}

接下来我会通过

给他们打电话
int main() {
    using namespace std::chrono_literals;

    boo(3s);
    boo(1h);
    boo(100ms);
}

输出很简单:

3000 milliseconds
3600000 milliseconds
100 milliseconds

但是,如果我想使用此功能怎么办:

    boo(3.5s);
    boo(0.5s);
    boo(0.3days);

然后我编译错误。 所以,我可以编写接收 chrono::duration:

的函数
template<class T>
void foo(std::chrono::duration<T> duration) {
    std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(duration).count() << " milliseconds" << std::endl;
}

然后 3.5 秒就可以了,但是 1 小时或 3.5 小时就不行了。 那么,问题是,我可以编写通用函数将 1s/1.s/1m/1.5m/1h/1.5h/etc 中的任何一个转换为毫秒吗? 也许我可以为 chrono:: 秒/小时创建重载运算符? 还是只是投、投、投?

我正在尝试下面/上面描述的所有内容

c++ c++-chrono milliseconds seconds
1个回答
0
投票

正确的函数模板定义也应该将句点作为模板参数:

template <class Rep, class Period>
void boo(std::chrono::duration<Rep, Period> duration) {
    
    std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(duration)
                     .count()
              << " milliseconds" << std::endl;
}

我对

days
的字面意思一无所知。没见过,但其余的都可以。

© www.soinside.com 2019 - 2024. All rights reserved.