模板化类型的最小/最大值

时间:2020-10-12 18:13:08

标签: c++ templates

我有一个很基本的问题。假设我有一个模板化函数:

bool is_max(std::uint32_t val) {
  return (val == std::numeric_limits<uint32_t>::max());
}

但是,为了使我的功能更灵活,我想使用模板:

template <typename T>
bool is_max(T val) {
  return (val == ???);
}

std :: numeric_limits函数适用于内置类型,但显然不适用于用户定义的类型。

当前内置的大多数数字类型(我正在尝试使用cnl::fixed_point)中是否有一些标准的运算符或函数可用于此处查找最小值/最大值?

1 个答案:

答案 0 :(得分:3)

处理此问题的方法是继续使用std::numeric_limits,并为所有所需的输入类型添加模板专用化。

引用cppreference

实施可以为特定于实现的类型提供std::numeric_limits的专业化:例如GCC提供了std::numeric_limits<__int128>。非标准库可能会增加库提供的类型的专业化,例如OpenEXR提供std::numeric_limits<half>用于16位浮点类型。