3

iomanipストリーム修飾子のそのままの使用は、a) 冗長であり、b) エラーが発生しやすい ( sticky と non-stickyなど) ため、ユーザー定義型の場合、すべてのものをデフォルトで非表示にすることができますoperator<<...ここに示すように、たとえば

ただし、組み込み型をフォーマットする場合 (ユーザー定義の演算子内からであっても) 、データが関数呼び出しでラップされる(beware C++14)と同様のアプローチを使用する方がはるかに便利です (IMHO) 。適切なフラグを設定 + リセットする一時オブジェクトを返します。std::quoted

基本的に、書く代わりに:

std::cout << std::setprecision(2) << std::fixed << 1.23456 << "\n";

あなたは仮説的に次のように書くでしょう:

using namespace shorter;
std::cout << precis(2, fixed(1.234556)) << "\n";

例が示すように、フラグの組み合わせはトリッキーになる可能性があり、悪魔は細部にあると確信しているため、「シェブロン地獄」に対処しようとする先行技術/既存のヘルパー ライブラリがあるかどうか疑問に思っていました。:-)

  • これに対処する既存のライブラリはありますか?
  • 自分で一連のヘルパーを作成したい場合、ここでの技術的な落とし穴は何ですか?

具体的には、この質問は、「タイプ セーフなフォーマット文字列」(Boost.Format が提供するものなど) に関するものではありません。

また、「最高の」ライブラリを求めているのではなく、通常の ostream に対してこれを行うライブラリについて尋ねています。(なぜか見つからなかったので。)

たとえば、C++ 形式の書き込み APIは次のようなことを行いますが、std::iostream に対してではなく、ライブラリの「ストリーム」タイプに対して行います。

MemoryWriter out;
out << pad(hex(0xcafe), 8, '0');
4

0 に答える 0