-2

、、、またはコンパイラ固有の拡張機能(非標準の組み込み型を除く)を使用せず#ifstdint.hinttypes.h他のすべてのC ++機能(たとえばC ++ 11type_traitsを含む)を自由に使用して、

typedef {some implementation-specific type} int_least64;

少なくとも64ビットの精度を提供する実装固有のタイプがあり、それ以外の場合はコンパイル時エラーが発生する場合に限りますか?

コンストラクトは、標準のプロパティ( 、 )__int64だけでなく、目的のプロパティ(MSVC ++など)を持つ可能性のある非標準の組み込みタイプを検出する必要があります。複数のタイプが要件に適合する場合は、適格な最小のものを選択する必要があります。理想的には、エラーを発生させるだけでなく、使用したり、任意の大きさの整数を検出したりすることも一般化できます(たとえば、一部のコンパイラーは現在提供しています)。longlong longenable_if__int128

4

2 に答える 2

2

いいえ、できません。プログラムが実装から利用可能な型を内省する機能はありません。また、修飾されていない名前が与えられた場合、名前が整形式でない場合でもプログラムが整形式のままであるような方法でプログラム内でそれを使用する方法はありません。タイプを示します。

cstdintそれが、C99 との互換性とともに、C++ に追加する動機の一部でした。

于 2012-09-28T15:02:39.810 に答える
0

問題が MSVC である場合は<cstdint>、少なくとも MSVS2010 にアップグレードするか、Windows 用に自分で作成してください。それは難しいことではありません。

使用できるテンプレートのトリックがいくつかありますが、それでもlong long64 ビット (およびそれ以上) の整数を取得する必要があります。

SO C++ ラウンジ (@StackedCrooked) の人から入手しました。

https://github.com/rubenvb/KISS/blob/master/include/types.hxx#L47

于 2012-09-28T15:11:22.777 に答える