タグ

logとc++に関するtyruのブックマーク (2)

  • Big Sky :: C++でcoutやcerrの挙動を変える。

    先日twitterで「C++でデバッグする時、よくやるよね」って言ったら結構知らない人がいたのでここでも紹介してみる。 既存のコードでcout/cerrを使ったデバッグ文がわんさかあって、これログファイルとして出力したいな...って場合ありますよね。 そんな場合 #include <iostream> #include <fstream> using namespace std; int main() { // こんなの ofstream ofs("debug.log"); cout.rdbuf(ofs.rdbuf()); // いれとく cout << "debug string" << endl; } こうしておくと、その後のcoutへの出力が全てdebug.logというファイルへ出力される。 なおrdbufを元に戻すには #include <iostream> #include <f

    Big Sky :: C++でcoutやcerrの挙動を変える。
  • google-glogに潜むトリックを解明する - 射撃しつつ前転 改

    google-glogは非常に有名なロギングライブラリであり、その名前からわかる通りgoogleの人々によって開発されている。使い方は簡単で、 LOG(INFO) << "this is not a drill"; みたいな感じで、LOG()が返すオブジェクトoperator<<で記録したいオブジェクトをつなげていくだけで使える。とても便利である。実は、この便利さの裏には、実はいくつかのトリックが隠れている。適当に見た目を真似して作るだけでは、glogと同じような便利さは実現できないのである。今日は、その便利さを実現しているトリックを紹介したい。 なぜLOG()はマクロなのか まず、このLOG(INFO)というのは一見、関数もしくはクラスのコンストラクタかなにかに見える。しかしその実体は実はマクロで、以下のように展開される。 LogMessage(INFO).stream() LOGという

    google-glogに潜むトリックを解明する - 射撃しつつ前転 改
  • 1