std::max与std::min只能提供两个元素或者给定范围内的最大最小值,如果希望求得可变参数的元素的最大最小值,需要使用变参模板函数。
以下为可变参数的最大值(max)、最小值(min)函数的实现,这里并不要求参数类型完全相同,只是限定参数类型必须为整数或者是浮点数
template <typename T, typename = typename std::enable_if<
std::is_integral<T>::value ||
std::is_floating_point<T>::value>::type>
constexpr T max(const T a) {
return a;
}
template <
typename T, typename... Args,
typename = typename std::enable_if<std::is_integral<T>::value ||
std::is_floating_point<T>::value>::type>
constexpr auto max(const T a, Args... args) {
auto b = max(args...);
return (a > b) ? a : b;
}
template <typename T, typename = typename std::enable_if<
std::is_integral<T>::value ||
std::is_floating_point<T>::value>::type>
constexpr T min(const T a) {
return a;
}
template <
typename T, typename... Args,
typename = typename std::enable_if<std::is_integral<T>::value ||
std::is_floating_point<T>::value>::type>
constexpr auto min(const T a, Args... args) {
auto b = min(args...);
return (a < b) ? a : b;
}