【发布时间】:2016-11-24 15:22:42
【问题描述】:
考虑以下代码:
// 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> 显式指定类型。在此代码的未来版本中,类型会有所不同。在不知道确切的持续时间类型的情况下,通用的方法是什么?
【问题讨论】:
-
如果没有为
std::min指定和现有的std::chrono::duration专业化(并且没有),那么就没有通用(和“好”)的方式。除了自己做这样的专业。如果您在多个地方需要它,那么这样的专业化可能是个好主意。 -
std::min 没有任何版本可以接受不同的参数类型。要么转换其中一个论点,要么同时转换两者。
-
我更改了问题,以便明确显示对通用代码的需求。
-
请注意,转换为较低分辨率的 TimePoint 会截断,因此需要显式转换才能实现您想要的目标。
-
@doug 感谢您的有用评论。问题是我想避免这种情况。 (例如,将
microseconds(可能在将来出现)转换为milliseconds。)这就是我寻找通用方式的原因。
标签: c++ c++11 chrono stl-algorithm