4

バックグラウンド


stdint残念ながら、現在の C++ 標準には、ヘッダーで定義された C99 の正確な幅の型がありません。

私が見つけることができた次善のもの (移植性の観点から) は、ライブラリからBoostの のcstdint.hpp実装でした。Boost.Integer

懸念


とはいえ、いくつかの問題があります。

Boosttypedefの実装は、boost namesapce( のようなものではなく) 内のすべての をダンプしboost::stdintます。これは完全に醜いです。usingこれは、関心のある型でのみ - ディレクティブを使用することを余儀なくされるか (これは余分なメンテナンス作業です)、全体boost namespaceをグローバル¹ スコープにする必要があるためです (これはnamespacesのポイントを無効にします)。 )。もちろん、たとえば、冗長にしboost::uint32_tてどこにでも入力することもできますが、これも将来にあまり適していません²。

質問


私は基本的にアドバイスを探しています。これらのまだ標準化されていない (とにかく C++ '03 ではない) 型を可能な限り透過的に利用するための最良の方法は何ですか?

このヘッダーを使用している、または独自のヘッダーを作成している方は、これらのタイプをどのように使用しますか? boost namespaceをやみくもに globalにマージし、namespaceすべての前に " "を付けboost::、 をラップするヘッダーを書きましたか?Boost.Integercstdint.hpp

アドバイスをいただければ幸いです。

最後に、すべてのことを言いました (ちなみに、これは暴言ではありません)。私は数学集約的なコードを書いているので、幅の保証は私にとって重要です。

明確化


class template1 - グローバル スコープは、これらの型を引数として受け取る関数 / を作成するときの唯一のオプションです。

2 - 標準の次のイテレーションが にラップstdint.hされるcstdintとき、私は " " で始まる一連のコードで立ち往生しますboost::。これは、まったく役に立たない追加の依存関係 (つまり、「boost/cstdint.hpp」) になります。

4

2 に答える 2

6

stdint.hを使用して、それを持たないコンパイラーに提供することもできます(MSVCの場合-msinttypesなど)。または、Boostのすべてのtypedefであるcstdintを記述しますusing(これは1回限りの書き込みなので、メンテナンスに問題はないと思います)。

生成も簡単です。この小さなスクリプトを使用して、私はそれを手に入れました。をチェックする定義を追加することもできますint64

#ifndef GEN_CSTDINT
#define GEN_CSTDINT

#include <boost/cstdint.hpp>

using boost::int16_t;
using boost::int32_t;
using boost::int64_t;
using boost::int8_t;
using boost::int_fast16_t;
using boost::int_fast32_t;
using boost::int_fast64_t;
using boost::int_fast8_t;
using boost::int_least16_t;
using boost::int_least32_t;
using boost::int_least64_t;
using boost::int_least8_t;
using boost::intmax_t;
using boost::uint16_t;
using boost::uint32_t;
using boost::uint64_t;
using boost::uint8_t;
using boost::uint_fast16_t;
using boost::uint_fast32_t;
using boost::uint_fast64_t;
using boost::uint_fast8_t;
using boost::uint_least16_t;
using boost::uint_least32_t;
using boost::uint_least64_t;
using boost::uint_least8_t;
using boost::uintmax_t;

#endif // GEN_CSTDINT
于 2009-09-26T18:03:08.913 に答える
1

stdint のポータブルバージョンを使用できます。

于 2009-09-26T17:57:32.213 に答える