我需要两个关于整数的特征。
std::is_integral (或boost::is_integral),但可用于用户定义的类型(例如,包装int的类,例如int_wrapper):如果类型的行为类似于整数,且其表示形式类似于标准积分类型(例如,如果T没有符号),则为true,但整数类型的定义非常严格,因为它包含这些类型的列表。因此,如果不是禁止的话,专门化std::is_integral似乎很困难(尽管我认为没有明确声明):is_integral是一个“主要”类型特征(20.7.4.1,注3:对于类型T正是一个主类型特征,在我的例子中,int_wrapper已经is_class等于true)。如果我专门研究int_wrapper的这一特性,我会冒什么风险?您知道符合我的需要的属性类(例如Boost)吗?mpz_class将满足这一特性。std::numeric_limits<T>::is_integer适合这个特性吗?我读到,如果numeric_limits<T>::is_integer == is_integral<T>::value)的行为类似于整数,那么专门化和设置numeric_limits<T>::is_integer == true是可以的,但是(在C++标准中)“整”和“整数”这两个术语是同义的(在这种情况下,我们应该始终使用T )。
总之,我是更好地定义我自己的特点,为我的确切需要,或尝试扩展标准的需要?
发布于 2010-08-10 11:07:15
这取决于您是否希望boost和其他标准库将您的类视为整数。如果是这样的话,除了专门化std/boost::is_integral<>之外,您别无选择。否则,使用它的默认实现创建您自己的is_integral<>,并将其转发到std/boost::is_ integral <>,并将其专门用于集成包装器。
https://stackoverflow.com/questions/3448028
复制相似问题