<iostream>
C++ライブラリで使用するのは好きではありません。の「printf」や「scanf」に似たものを使用することを好み<stdio.h>
ます。
Boostのフォーマットライブラリを使用して<iostream>
、すべてのC ++プログラムを置き換えることはできますか?
Boost Formatは、フォーマットビットのみを実行します。実際に画面に何かを表示するには、iostreamが必要です。
もちろん、それらを一緒に使用すると、printf
あなたが探しているものと同等になります。そして、型の安全性を犠牲にすることなくこれを行います(ただし、コンパイラーは通常、不正なprintf引数について警告するため、これは最近の大きな問題ではありません)。
Boost.Formatはostreamで動作します。次のように使用します
cout << boost::format("%2% %1%") % 36 % 77;
または好き
string s2 = str( format("%2% %1%") % 36 % 77 );
必要に応じて文字列を印刷します。
Boost.Formatはistreamでは機能しません。
printf
C ++で引き続き使用できますが、問題はありません。ちょうど#include <cstdio>
、あなたは行ってもいいです。もちろん、iostream
いくつかの利点があります(型安全性が大きな利点です)-それでも私は切り替えることをお勧めします。
scanf
他の人からの短い答えは「はい」ですが、Boost形式に相当するものはありません。ただし、別の方法として、KarmaコンポーネントとQiコンポーネントをそれぞれ介して入力機能と出力機能の両方を備えたBoostのSpiritライブラリを使用することもできます。ただし、これは完全なパーサー/ジェネレーターの実装であるため、実行していることにはやり過ぎかもしれません。
printfとscanfには、独自のオブジェクトを使用できないという制限があります。
C ++を使用している場合は、ストリームについて少し知っておく必要があります。これは、C++が言語の標準であるためです。C ++では、独自のオブジェクトのストリーム演算子を作成し、それらをストリームと完全に連携させることができます。
もちろん、boost :: formatを使用することもできますが、これはフォーマットされた出力にのみ使用されます。私はboost::formatが好きで、たとえばローカリゼーション(翻訳可能な文字列)を使用している場合に非常に便利です。