【发布时间】:2010-08-10 10:35:26
【问题描述】:
我需要两个关于整数的特征。
-
1234563就像一个整数,其表示类似于标准整数类型(例如,
我需要的第二个特征是具有整数语义的类型(具有位算术运算、位操作等)。例如,来自 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)
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 中)吗?
总之,我是更好地为我的精确需求定义自己的特征,还是尝试扩展标准特征?
【问题讨论】:
标签: c++ traits typetraits