繁体   English   中英

std :: min of std :: chrono ::不同类型的持续时间

[英]std::min of std::chrono::duration of different types

考虑以下代码:

// durations are from std::chrono
auto a = get_duration_1(); // milliseconds, will vary in future versions
auto b = get_duration_2(); // seconds, will vary in future versions
auto c = std::min(a, b);

它不会编译,因为编译器无法实例化std::min正确版本,因为参数类型不同。

当然,现在可以使用std::min<milliseconds>明确指定类型。 在此代码的未来版本中,类型会有所不同。 在不知道确切持续时间类型的情况下,这样做的通用方法是什么

给定两个持续时间, D1 d1D2 d2 ......

您可以将两个持续时间转换为它们的公共类型std::common_type_t<D1, D2> ,然后找到这些值的最小值。

或者只是调用std::min<std::common_type_t<D1, D2>>(d1, d2)并根据需要将它们转换为该类型。

这是有效的,因为std::common_type专门用于为duration类型做正确的事情,请参阅C ++标准中的[time.traits.specializations]。

您可以使用以下功能:

#include <chrono>

template <typename T1, typename T2>
auto generic_min(const T1& duration1, const T2& duration2)
{
    using CommonType = typename std::common_type<T1,T2>::type;
    const auto d1 = std::chrono::duration_cast<CommonType>(duration1);
    const auto d2 = std::chrono::duration_cast<CommonType>(duration2);
    return std::min(d1,d2);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM