2

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

  1. 第一个类似于std::is_integral(or boost::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 中)吗?

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

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

4

1 回答 1

2

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

于 2010-08-10T11:07:15.383 回答