我需要兩個有關整數的特徵。如果該類型的行爲像的整數,並且其表示爲真:整數特徵(is_integer,is_integral)
第一個會像
std::is_integral
(或boost::is_integral
),但與用戶定義的類型可使用(例如類中封裝一個int
,說int_wrapper
)像標準整數類型(例如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
等於真)。 如果我專門針對int_wrapper
這個特質,我會採取什麼風險? 你知道一個符合我需求的特質類(例如Boost)嗎?我需要的第二個特徵是具有整數語義的類型(包括位算術運算,位操作等)。例如來自GMP的
(mpz_class
將滿足這個特徵。std::numeric_limits<T>::is_integer
是否適合這種特質?我同時認爲,如果T
的行爲類似於整數,而且(在C++標準中)術語「整數」和「整數」是同義詞(在這種情況下,我們總是應該有numeric_limits<T>::is_integer == is_integral<T>::value
)numeric_limits<T>::is_integer == true
)
總之,我是否更好地爲自己的確切需求定義自己的特質,或嘗試擴展標準特性?