OutputDebugString
メソッドはかなり退屈なようで、文字列にのみ限定されており、ポリモーフィックではないようです。整数型またはその他の変数型を出力したい場合はどうすればよいですか?
のような関数が存在することを願っていますstd::cout
!
OutputDebugString
メソッドはかなり退屈なようで、文字列にのみ限定されており、ポリモーフィックではないようです。整数型またはその他の変数型を出力したい場合はどうすればよいですか?
のような関数が存在することを願っていますstd::cout
!
次のようなクラスを使用します。
class stringbuilder
{
public:
stringbuilder()
{
}
template< class T >
stringbuilder& operator << ( const T& val )
{
os << val;
return *this;
}
operator std::string () const
{
return os.str();
}
private:
std::ostringstream os;
};
出力をラッパーOutputDebugString
(または文字列のみをログに記録するもの)に渡します。
void MyOutputDebugString( const std::string& s )
{
::OutputDebugString( s.c_str() );
}
//usage:
MyOutputDebugString( stringbuilder() << "integer " << 5 );
ユニコードをサポートする Mats Petersson の回答のマクロ:
#define odslog(msg) { std::wstringstream ss; ss << msg; OutputDebugStringW(ss.str().c_str()); }
使用法:
odslog("A string " << 123123 << L"A wide string" << "\n");
さらに、MFC を使用する場合は、TRACE TRACE1 TRACE2 ... マクロを printf のようにデバッグ出力に使用できます。