3

<iostream>C++ライブラリで使用するのは好きではありません。の「printf」や「scanf」に似たものを使用することを好み<stdio.h>ます。

Boostのフォーマットライブラリを使用して<iostream>、すべてのC ++プログラムを置き換えることはできますか?

4

5 に答える 5

5

Boost Formatは、フォーマットビットのみを実行します。実際に画面に何かを表示するには、iostreamが必要です。

もちろん、それらを一緒に使用すると、printfあなたが探しているものと同等になります。そして、型の安全性を犠牲にすることなくこれを行います(ただし、コンパイラーは通常、不正なprintf引数について警告するため、これは最近の大きな問題ではありません)。

于 2010-05-01T13:44:28.230 に答える
5

Boost.Formatはostreamで動作します。次のように使用します

cout << boost::format("%2% %1%") % 36 % 77; 

または好き

string s2 = str( format("%2% %1%") % 36 % 77 );

必要に応じて文字列を印刷します。

Boost.Formatはistreamでは機能しません。

于 2010-05-01T13:48:26.550 に答える
2

printfC ++で引き続き使用できますが、問題はありません。ちょうど#include <cstdio>、あなたは行ってもいいです。もちろん、iostreamいくつかの利点があります(型安全性が大きな利点です)-それでも私は切り替えることをお勧めします。

于 2010-05-01T13:43:56.090 に答える
0

scanf他の人からの短い答えは「はい」ですが、Boost形式に相当するものはありません。ただし、別の方法として、KarmaコンポーネントとQiコンポーネントをそれぞれ介して入力機能と出力機能の両方を備えたBoostのSpiritライブラリを使用することもできます。ただし、これは完全なパーサー/ジェネレーターの実装であるため、実行していることにはやり過ぎかもしれません。

于 2010-05-03T19:28:35.640 に答える
0

printfとscanfには、独自のオブジェクトを使用できないという制限があります。

C ++を使用している場合は、ストリームについて少し知っておく必要があります。これは、C++が言語の標準であるためです。C ++では、独自のオブジェクトのストリーム演算子を作成し、それらをストリームと完全に連携させることができます。

もちろん、boost :: formatを使用することもできますが、これはフォーマットされた出力にのみ使用されます。私はboost::formatが好きで、たとえばローカリゼーション(翻訳可能な文字列)を使用している場合に非常に便利です。

于 2010-05-01T13:49:18.067 に答える