我有一个很基本的问题。假设我有一个模板化函数:
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)中是否有一些标准的运算符或函数可用于此处查找最小值/最大值?
答案 0 :(得分:3)
处理此问题的方法是继续使用std::numeric_limits
,并为所有所需的输入类型添加模板专用化。
引用cppreference:
实施可以为特定于实现的类型提供
std::numeric_limits
的专业化:例如GCC提供了std::numeric_limits<__int128>
。非标准库可能会增加库提供的类型的专业化,例如OpenEXR提供std::numeric_limits<half>
用于16位浮点类型。