OutputDebugString
方法似乎相当乏味,似乎仅限于字符串而不是多态。如果我想输出一些整数或其他变量类型该怎么办?
希望std::cout
存在一些类似的功能!
OutputDebugString
方法似乎相当乏味,似乎仅限于字符串而不是多态。如果我想输出一些整数或其他变量类型该怎么办?
希望std::cout
存在一些类似的功能!
我很确定您可以编写一个streambuf
通过OutputDebugString
. 这并不完全直截了当,但有可能。
当然可以使用这样的东西:
std::stringstream ss;
ss << something << another << variable << here << endl;
OutputDebugString(ss.str().c_str());
如果您在项目中启用了“UNICODE”,您可能需要使用MultiByteToWideChar
将 c_str() 转换为宽字符串。
由于接受的答案并没有真正提供工作版本:
如果您不关心 unicode - 尽管您可能应该在运送任何东西时关心它,但我假设您不会在包含 OutputDebugString 的情况下运送它 - 您可以使用其他版本之一,例如OutputDebugStringA
:
stringstream ss;
ss << "Hello World\n";
OutputDebugStringA(ss.str().c_str());
使用这样的类:
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 答案的宏,支持 unicode:
#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 一样工作的宏到调试输出。