Home > プログラミング > std::cout のっとり

std::cout のっとり

MPI使ってるときにルートプロセスだけ cout で情報を出力するように cout をのっとってみた.副作用として iomanip がどうやって処理されているかを身をもって知る羽目になった(一番下のテンプレート定義だけだとうまくコンパイルできなかった...)

class myOstream : public std::ostream {
 public:
  // for iomanip
  myOstream&
  operator<<(__ostream_type& (*manip)(__ostream_type&
    if(rank==0) std::cout << manip;
    return *this;
  }
  myOstream&
  operator<<(__ios_type& (*manip)(__ios_type&)){
    if(rank==0) std::cout << manip;
    return *this;
  }
  myOstream&
    operator<<(ios_base& (*manip) (ios_base&)){
    if(rank==0) std::cout << manip;
    return *this;
  }
  // for other types
  template <typename C>
  myOstream& operator<<(const C&v){
    if(rank==0) std::cout << v;
    return *this;
  }
};
muOstream cout;

型を決定できないのかねぇ.ちゃんと書いといてやらんと.

★下記に2つの英単語をスペースで区切って入力してください

Home > プログラミング > std::cout のっとり

Search
Feeds

Page Top