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