1

boost/cstdint.hppC++03 モード ( -std=c++03) でコンパイルしていて、固定幅の整数が必要なので、C++ プロジェクトで使用しています (ネットワーク経由で送信され、ファイルに保存されます)。文字列をフォーマットするためのシンプル高速snprintfな方法であるため、私も使用しています。

boost::uint64_t使用する適切なフォーマッターはありますか、snprintf(...)それとも別のソリューション ( boost::format、 std::ostringstream) に切り替える必要がありますか?

私は現在使用していますが、別のアーキテクチャ (として定義されていない) では機能しない可能性があり、固定幅整数を使用する目的を無効に%luする可能性があるため、完全には満足していません。boost::uint64_tlong unsigned

boost::uint64_t id
id = get_file_id(...)
const char* ENCODED_FILENAME_FORMAT = "encoded%lu.dat";
//...
char encoded_filename[34];
snprintf(encoded_filename, 34, ENCODED_FILENAME_FORMAT, id);
4

1 に答える 1

3

snprintfブースト機能ではありません。基本的な型のみを印刷する方法を知っています。それらのどれも と一致しない場合boost::uint64_t、それを印刷することさえできません。

一般に、フォーマッタは基になる型と一致する必要があることに注意してください。そのため、たとえ可能であったとしても、フォーマッターはプラットフォームに依存します。Boost が新しいフォーマッタを に追加できる拡張メカニズムはありませんsnprintf

于 2013-09-12T11:11:19.360 に答える