我需要关于整数的两个特征。
第一个类似于
std::is_integral
(orboost::is_integral
),但可用于用户定义的类型(例如,包装 an 的类int
,例如int_wrapper
):如果该类型的行为类似于整数并且其表示类似于标准整数类型(例如sizeof(T) * CHAR_BITS == std::numeric_limits<T>::digits
,如果T
是无符号的) ,则为 true整数类型的定义非常严格,因为它由这些类型的列表组成。所以专业化std::is_integral
似乎很困难,如果不被禁止的话(尽管我认为没有明确说明):is_integral
是“主要”类型特征(20.7.4.1,注 3:对于类型 T,恰好一个主要类型特征是正确的,在我的情况下int_wrapper
已经is_class
等于为真)。如果我专门研究这个特征,我会承担什么风险int_wrapper
?你知道适合我需要的特质类(例如在 Boost 中)吗?我需要的第二个特征是具有整数语义的类型(使用位算术运算、位操作等)。例如
mpz_class
from GMP 将满足此特征。std::numeric_limits<T>::is_integer
适合这个特质吗?我读到可以专门化和设置numeric_limits<T>::is_integer == true
ifT
行为像一个整数,而且(在 C++ 标准中)术语“整数”和“整数”是同义词(在这种情况下,我们总是有numeric_limits<T>::is_integer == is_integral<T>::value
)
总之,我是更好地为我的精确需求定义自己的特征,还是尝试扩展标准的特征?