可变参数的最大、最小值函数

这篇博客介绍了如何利用C++的模板元编程技术,实现可变参数列表的最大值和最小值函数。这些函数能够接受任意数量的整数或浮点数参数,并返回其中的最大值或最小值。通过模板和递归的方式,确保了函数的灵活性和类型安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值