0

std::printf標準 C++ ストリームに機能を実装するライブラリを知っている人はいますか? 私は書くことができるマニピュレータを探しています:

std::cout << ns::stream_printf("There are %d cookies in %d jars\n", 
                                num_cookies, num_jars);

変数テンプレート (またはそれらのエミュレーション) を使用した適切な実装は、プログラムがクラッシュする代わりに、動的な型の安全性、つまり不正な形式の文字列の例外を提供することさえできます。

4

2 に答える 2

0

http://sf.net/projects/iofの iofは、boost の代替手段です。それを使用すると、次のことができます。

cout << iof::fmt("There are %d cookies in %d jars\n") 
     << num_cookies << num_jars;

printf との唯一の違いは、C++ は型を認識しているため、常に %s を使用することです。プレースホルダー内で f、g などを使用してフォーマットします。

cout << iof::fmt("The number %.2fs is a float value with 2 decimals") 
     << 3.141592 << endl;

次のようなきちんとしたこともできます

cout << iof::fmt("XYZ coords: %8.4fS %s %s\n") 
     << x << y << z;

これにより、複数の %s プレースホルダーにわたってフォーマットが「保持」されます。

完全な正規表現の解析が必要ない場合は、入力機能を介して sscanf などに相当するものを取得することもできます。

float a, b, c;
cin >> iof::fmt("%fs,%fs,%fs") >> a >> b >> c; 
于 2014-01-13T21:35:31.660 に答える