在 C++ 中,limits
是一个模板类,用于提供有关数据类型属性的信息
#include#include // 自定义类型 class CustomType { public: CustomType(double value) : value_(value) {} // 转换为 double 类型 operator double() const { return value_; } private: double value_; }; // 为自定义类型特化 std::numeric_limits namespace std { template <> class numeric_limits { public: static constexpr bool is_specialized = true; static constexpr CustomType min() noexcept { return CustomType(0.0); } static constexpr CustomType max() noexcept { return CustomType(100.0); } static constexpr CustomType lowest() noexcept { return CustomType(-100.0); } static constexpr int digits = 64; static constexpr int digits10 = 18; static constexpr int max_digits10 = 23; static constexpr bool is_signed = true; static constexpr bool is_integer = false; static constexpr bool is_exact = false; static constexpr int radix = 2; static constexpr CustomType epsilon() noexcept { return CustomType(1e-16); } static constexpr CustomType round_error() noexcept { return CustomType(0.5); } static constexpr int min_exponent = -1021; static constexpr int min_exponent10 = -307; static constexpr int max_exponent = 1024; static constexpr int max_exponent10 = 308; static constexpr bool has_infinity = true; static constexpr bool has_quiet_NaN = true; static constexpr bool has_signaling_NaN = true; static constexpr float_denorm_style has_denorm = denorm_present; static constexpr bool has_denorm_loss = true; static constexpr CustomType infinity() noexcept { return CustomType(INFINITY); } static constexpr CustomType quiet_NaN() noexcept { return CustomType(NAN); } static constexpr CustomType signaling_NaN() noexcept { return CustomType(NAN); } static constexpr CustomType denorm_min() noexcept { return CustomType(0.0); } static constexpr bool is_iec559 = true; static constexpr bool is_bounded = true; static constexpr bool is_modulo = false; static constexpr bool traps = false; static constexpr bool tinyness_before = false; static constexpr float_round_style round_style = round_to_nearest; }; } // namespace std int main() { std::cout << "Minimum value of CustomType: "<< std::numeric_limits ::min()<< std::endl; std::cout << "Maximum value of CustomType: "<< std::numeric_limits ::max()<< std::endl; std::cout << "Epsilon value of CustomType: "<< std::numeric_limits ::epsilon()<< std::endl; return 0; }
在这个示例中,我们首先创建了一个名为 CustomType
的自定义类型。然后,我们在 std
命名空间内为该类型特化了 std::numeric_limits
模板类。这样,我们就可以使用 std::numeric_limits
来获取有关 CustomType
的属性信息。
请注意,这个示例仅适用于演示目的。在实际应用中,您需要根据您的自定义类型的具体属性来设置相应的值。