1

文字列値のリストをostreamに出力したいのですが。

私はこれのためにオーバーロード関数を宣言して実装することができます:

ostream& operator<< (ostream &out, const list<string> &in);

...そして次のように書く

cout << value;

...ただし、文字列のリストをダンプするには、少なくとも2つの方法があります。1行に1つの文字列、またはスペースで区切られた1行のすべての文字列(または他の区切り文字)です。

ストリーム制御によってダンプ機能の動作を変更することは可能ですか?

私は次のようなものを書きたいと思います:

list<string> lst;
...
cout << print_as_multiline() << lst;

... と:

list<string> lst;
...
cout << print_as_one_line() << set_separator (", ") << lst;
4

2 に答える 2

0

アイデアがあります…テストしていただけますか?あなたのオペレーターで << 実装ファイル グローバル、静的を作成しますか?? variable string Separator= def sep (", ").

<<、で使用します(そして、def sepにリセットする前に-あなたの決定)

<<. このコンストラクターで Separator を引数に設定します。

クラス set_separator に対して新しい演算子 << を定義し、何もせず、ストリームを返すだけです。

複数行出力と同様です。

于 2013-01-09T10:18:48.543 に答える
0

そのためのいくつかのオプションがあります: - 複数の関数またはセパレーターをパラメーターとして取る関数を記述します。- セパレーターをストリームに取り付けます。iostream のxalloc()関数を使用して、カスタム プロパティ スロットを割り当てることができます (一度だけ割り当ててから、すべてのストリームに適用する必要があります)。その後、ストリームiword()pword()メンバー関数を使用して、添付された情報にアクセスできます。フックできるイベントもあるので、たとえばストリームが破棄されたときにカスタム関数が呼び出されます。必要に応じて、動的に割り当てられたコンテンツを解放するためにそれを使用します。- リストの書式設定を処理する、いわゆるファセットを作成します。このファセットは、ストリームのロケールに関連付けられています。

私のアドバイス: 最初のオプションを選択してください。ある場所でフォーマットを決定する必要があり、実際にはまったく別の場所で使用する場合は、2 番目のものを使用します。3 番目のオプションを検討する前に、Langer&Kreft C++ IOStreams and Locales を読んでください。;)

于 2013-01-12T23:33:55.970 に答える