代码之家  ›  专栏  ›  技术社区  ›  rafak

整数特征(是整数,是整数)

  •  1
  • rafak  · 技术社区  · 15 年前

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

    1. 第一个可能是 std::is_integral (或) boost::is_integral ),但可用于用户定义的类型(例如包装 int int_wrapper ):如果类型的行为类似于整数,并且其表示形式类似于标准整数类型(例如 sizeof(T) * CHAR_BITS == std::numeric_limits<T>::digits 如果 T 但整数类型的定义非常严格,因为它由这些类型的列表组成。如此专业 std::是积分 似乎很难,如果不是禁止的话(尽管我认为没有明确说明): is_integral 是一个“主要”类型的特征(20.7.4.1,注3:在我的例子中,对于T型来说,只有一个主要类型的特征是正确的 内包装 已经 is_class 等于真)。 如果我把这个特性专门用于 内包装 ? 你知不知道有一个特质类(比如在boost中)适合我的需求?

    2. 我需要的第二个特性是具有整数语义的类型(包括位算术操作、位操作等)。例如 mpz_class 从gmp可以满足这个特性。是 std::numeric_limits<T>::is_integer 适合这个特点?我读了两篇文章,都说专业化和设置是可以的 numeric_limits<T>::is_integer == true 如果 T型 行为像一个整数,但也(在C++标准中)术语“整数”和“整数”是同义的(在这种情况下,我们应该总是有的)。 numeric_limits<T>::is_integer == is_integral<T>::value )

    总之,我是更好地定义自己的特性来满足自己的精确需求,还是尝试扩展标准特性?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Maxim Egorushkin    15 年前

    这取决于您是否希望boost和其他标准库将您的类视为整数。如果是,您没有其他方法,只能指定std/boost::is_integral<>否则,将您自己的isúintegral<>及其默认实现转发到std/boost::isúintegral<>并将其专门化为整型包装器。