バックグラウンド
stdint
残念ながら、現在の C++ 標準には、ヘッダーで定義された C99 の正確な幅の型がありません。
私が見つけることができた次善のもの (移植性の観点から) は、ライブラリからBoost
の のcstdint.hpp
実装でした。Boost.Integer
懸念
とはいえ、いくつかの問題があります。
Boost
typedef
の実装は、boost namesapce
( のようなものではなく) 内のすべての をダンプしboost::stdint
ます。これは完全に醜いです。using
これは、関心のある型でのみ - ディレクティブを使用することを余儀なくされるか (これは余分なメンテナンス作業です)、全体boost namespace
をグローバル¹ スコープにする必要があるためです (これはnamespace
sのポイントを無効にします)。 )。もちろん、たとえば、冗長にしboost::uint32_t
てどこにでも入力することもできますが、これも将来にあまり適していません²。
質問
私は基本的にアドバイスを探しています。これらのまだ標準化されていない (とにかく C++ '03 ではない) 型を可能な限り透過的に利用するための最良の方法は何ですか?
このヘッダーを使用している、または独自のヘッダーを作成している方は、これらのタイプをどのように使用しますか? boost namespace
をやみくもに globalにマージし、namespace
すべての前に " "を付けboost::
、 をラップするヘッダーを書きましたか?Boost.Integer
cstdint.hpp
アドバイスをいただければ幸いです。
最後に、すべてのことを言いました (ちなみに、これは暴言ではありません)。私は数学集約的なコードを書いているので、幅の保証は私にとって重要です。
明確化
class
template
1 - グローバル スコープは、これらの型を引数として受け取る関数 / を作成するときの唯一のオプションです。
2 - 標準の次のイテレーションが にラップstdint.h
されるcstdint
とき、私は " " で始まる一連のコードで立ち往生しますboost::
。これは、まったく役に立たない追加の依存関係 (つまり、「boost/cstdint.hpp」) になります。