ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

CとC++コミュのstd::stringstream

  • mixiチェック
  • このエントリーをはてなブックマークに追加

コメント(6)

さっそく質問。
LOG_IF_DEBUG(level, "a=" << a << ",b=" << b); // DEBUGが真ならログに何か出す
こういうことをしたいのですよ。

状況によって例えばこんな定義
#define LOG_IF_DEBUG(l,message) foo_dispatch(l, \
dynamic_cast<stringstream&>(stringstream()<<message).str())

void foo_dispatch(int,std::string const& s); // ここは std::cerr<<s だけの動作と考えてもらって構わない

gcc-4.1あたりでこれをやると、与えるmessageの型によって挙動不審。ちなみにオプチマイズは-O3。
最初がintだとそれらしき文字列が生成されるけど、
最初が文字列リテラルだとできあがる文字列の頭に謎な数値が付いたり。

不審な挙動を取り除く方法はないでしょうか?
今回の用途ではstringstreamの仕様はありがたくないので、
次の方向性としてはostream継承で新しいクラスを用意することになりそう。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

CとC++ 更新情報

CとC++のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング