C++,何もしないostream,ロギング
それくらいデフォで用意しとけってーの!なんかboostにはあるとかないとか。
"null ostream"でぐぐるとなんかでる。streambufをちょっと拡張してostreamに渡してやればいいらしい。
null ostream? - C / C++
struct null_streambuf:streambuf { int overflow(int c){return c;} };
で、簡単なロガーを作った。
struct logger { logger(ostream* dest,const char* prefix=""):dest(dest),enabled(true),prefix(prefix){} bool enabled; ostream* dest; const char* prefix; }; template<typename T> ostream& operator<<(logger& l,const T& content) { static null_streambuf ns; static ostream nos(&ns); if(!l.enabled) return nos; (*l.dest) << l.prefix << content; return *l.dest; }
logger l(cout,"[header] "); l << "test" << endl; //output: [header] test l.enabled=false; l << "hoge" << endl; //output: nothing