[過去ログ] C++相談室 part165 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
87
(1): デフォルトの名無しさん (ワッチョイ cf63-nyJS) [sage] 2023/12/24(日) 17:42:14.24 ID:foDTiHm90(1/5) AAS
質問なのですが自作クラスFooのストリーム出力演算子に引数付きのマニピュレータを追加したいのですが
  ↓こんなやつ
  Foo obj;
  cout << custom_setw(10) << obj; // 整数のベクトル的なオブジェクトobjの要素を幅10文字で出力
custom_setw()で与えた10という数値をつつがなくFooのストリーム出力演算子
std::ostream& operator<<(std::ostream& os, const Foo& obj)
に渡すには一体どうすれば……orz
89: はちみつ餃子◆8X2XSCHEME (ワッチョイ ff3e-XnzH) [sage] 2023/12/24(日) 18:05:55.09 ID:SfA3xmSz0(1/2) AAS
>>87-88
特定の型を出力するときにだけ作用する書式を設定するマニピュレータってこと?

std::setw がやってるのはストリームのメンバ関数 width を呼ぶのと同じ。
ストリームのオブジェクトが幅に関する情報を保存するデータメンバを持っていて、それを変更してる。

もちろんあなたが定義した独自の型 (この例では Foo) に結び付いた書式を保持するところなんて存在しないから単純にはできない。
私が思いつくのは
 ・ ストリームのほうも新しいものを定義する、つまり basic_ostream を継承して Foo 用の書式を格納するデータメンバを増やす
 ・ ストリームに対応付いたデータを格納するものを std::map かなんかで保持しておいて Foo を出力するときはそれを参照する
ということくらいかな。

スレッドが絡むと面倒くさいけど、しょうがないね。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.037s