【问题标题】:integer traits (is_integer, is_integral)整数特征(is_integer,is_integral)
【发布时间】:2010-08-10 10:35:26
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ traits typetraits


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-01-18
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      相关资源
      最近更新 更多