模板类型的最小/最大值

jka*_*ang 3 c++ templates

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

bool is_max(std::uint32_t val) {
  return (val == std::numeric_limits<uint32_t>::max());
}
Run Code Online (Sandbox Code Playgroud)

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

template <typename T>
bool is_max(T val) {
  return (val == ???);
}
Run Code Online (Sandbox Code Playgroud)

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

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

0x5*_*453 5

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

引用cppreference

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