整数に関する 2 つの特性が必要です。
最初のものは
std::is_integral
(またはboost::is_integral
) のようになりますが、ユーザー定義型 (たとえば、 anint
をラップするクラスなど) で使用できますint_wrapper
: 型が整数のように動作し、その表現が標準の整数型のようである場合 (たとえばsizeof(T) * CHAR_BITS == std::numeric_limits<T>::digits
、T
が符号なしの場合) はtrue ですが、整数型の定義は、これらの型のリストで構成されるという点で非常に厳密です。したがって、禁止されていない場合、特殊std::is_integral
化は難しいようです(明示的に述べられていないと思いますis_integral
が):「プライマリ」タイプの特性です(20.7.4.1、注3:タイプTに対して正確に1つのプライマリタイプの特性が真です。私の場合int_wrapper
はすでにis_class
等しいです真に)。この特性を に特化した場合、どのようなリスクがありますint_wrapper
か? 私のニーズに合った特性クラス (Boost など) を知っていますか?必要な 2 番目の特性は、整数セマンティクス (ビット算術演算、ビット操作など) を持つ型用です。たとえば、
mpz_class
from GMP はこの特性を満たします。std::numeric_limits<T>::is_integer
この特性に適していますか?が整数のように動作するnumeric_limits<T>::is_integer == true
場合は特殊化して設定しても問題ないことと、 (C++ 標準では)「整数」と「整数」という用語は同義語であることの両方を読みました (この場合、常に を持っている必要があります) 。T
numeric_limits<T>::is_integer == is_integral<T>::value
結論として、正確なニーズに合わせて独自の特性を定義するのと、標準の特性を拡張してみるのとではどちらがよいでしょうか?