如何使用底层泛型类型的最小/最大可能值初始化泛型函数中的变量?我正在寻找Nim相当于C ++的std::numeric_limits
。
答案 0 :(得分:2)
Nim不需要特殊的模块。一般模式是使用low(T)
或high(T)
来获取类型T
的最小/最大可能值。默认情况下,所有整数类型的函数都会重载。通过为它们实现low
和high
,它可以轻松扩展为浮点类型或任何其他类型。例如,以下代码适用于任何标准数字类型:
import typetraits # only required for priting the type name
proc high(T: typedesc[SomeReal]): T = Inf
proc low(T: typedesc[SomeReal]): T = NegInf
proc requiresNumericLimits[T]() =
let minPossible = low(T)
let maxPossible = high(T)
echo "Min of type ", name(T), ": ", minPossible
echo "Max of type ", name(T), ": ", maxPossible
requiresNumericLimits[int]()
requiresNumericLimits[int16]()
requiresNumericLimits[uint16]()
requiresNumericLimits[float32]()
requiresNumericLimits[float64]()
输出:
Min of type int: -9223372036854775808
Max of type int: 9223372036854775807
Min of type int16: -32768
Max of type int16: 32767
Min of type uint16: 0
Max of type uint16: 65535
Min of type float32: -inf
Max of type float32: inf
Min of type float64: -inf
Max of type float64: inf