gpt4 book ai didi

c++ - 整数特征(is_integer,is_integral)

转载 作者:行者123 更新时间:2023-11-30 04:38:00 25 4
gpt4 key购买 nike

我需要两个关于整数的特征。

  1. 第一个类似于 std::is_integral (或 boost::is_integral ),但可用于用户定义的类型(例如包装 int 的类,比如 int_wrapper ):如果类型的行为类似于整数并且其表示形式类似于标准整数类型(例如,如果 sizeof(T) * CHAR_BITS == std::numeric_limits<T>::digits 是无符号的,则为 T)但是整数类型的定义非常严格,因为它由这些类型的列表组成。所以专门化 std::is_integral 似乎很困难,如果不是被禁止的话(虽然我认为没有明确说明):is_integral 是一个“主要”类型特征(20.7.4.1,注 3:只有一个主要类型特征对于类型 T 是正确的,在我的例子中是 int_wrapper is_class 已经等于 true)。如果我将此特性专门用于 int_wrapper,我将承担哪些风险?您知道适合我需要的特征类(例如在 Boost 中)吗?

  2. 我需要的第二个特征是具有整数语义的类型(具有位算术运算、位操作等)。例如,来自 GMP 的 mpz_class 将满足此特征。 std::numeric_limits<T>::is_integer 适合这个特征吗?我读到如果 numeric_limits<T>::is_integer == true 的行为像一个整数,那么专门化和设置 T 是可以的,而且(在 C++ 标准中)术语“整数”和“整数”是同义词(在这种情况下我们总是有 numeric_limits<T>::is_integer == is_integral<T>::value )

总而言之,我是根据自己的确切需求定义自己的特征,还是尝试扩展标准特征?

最佳答案

这取决于您是否希望 boost 和其他标准库将您的类视为一个整体。如果是这样,您别无选择,只能专门化 std/boost::is_integral<>。否则制作您自己的 is_integral<> 并将其默认实现转发到 std/boost::is_integral<> 并将其专门用于您的积分包装器。

关于c++ - 整数特征(is_integer,is_integral),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3448028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com