[過去ログ] C++相談室 part165 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
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
88
(1): デフォルトの名無しさん (ワッチョイ cf63-nyJS) [sage] 2023/12/24(日) 17:42:52.36 ID:foDTiHm90(2/5) AAS
グローバル変数渡しは最初に思いつくのですが、ostringstream os1, os2とFoo obj1, obj2に対して異なるスレッドで
os1 << custom_setw(30) << obj1;  // スレッド1
os2 << custom_setw(20) << obj2;  // スレッド2
とかやったら詰むし
std::setw()とか一体どうやってるんじゃ……
91: デフォルトの名無しさん (ワッチョイ cf63-nyJS) [sage] 2023/12/24(日) 19:34:37.93 ID:foDTiHm90(3/5) AAS
レス㌧クス、
>ストリームのオブジェクトが幅に関する情報を保存するデータメンバを持っていて、それを変更してる。
なるほど……
これはユザーの立場からはメンバの追加ができない領域なので、Fooの側にメンバを持たせることにしますか……
class FooWrp {
  const Foo& m_objRef;
  int m_nWidth;
public:
  FooWrp(const Foo& obj, int width) : m_objRef(obj), m_nWidh(width) { }
  friend std::ostream& operator<<(std::ostream& os, const FooWrp& wrp) { ...(wrp.m_objRefの要素をwrp.m_nWidthに描かれている幅で出力する処理)... }
};
92: デフォルトの名無しさん (ワッチョイ cf63-nyJS) [sage] 2023/12/24(日) 19:35:17.01 ID:foDTiHm90(4/5) AAS
// 使い方
Foo obj;
cout << FooWrp(obj, 10);

ダッサwwwwwwwwwwwwwwwwwww
しかし、「たかが表示の整形」のために排他制御しつつmapを弄ったりTLSの利用を考えるのもアレなのでこれはこれで仕方が無いのか、orz
94: デフォルトの名無しさん (ワッチョイ cf63-nyJS) [sage] 2023/12/24(日) 19:50:06.00 ID:foDTiHm90(5/5) AAS
Foo obj;
std::string s = obj.str(10); // 10億ギガ文字
cout << s;
出力を完遂できるんかこれ……
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.037s