【发布时间】:2012-05-24 14:44:47
【问题描述】:
我的 ostream 有问题,我写了一个非常基本的宏,应该打印出它的参数。
请看下面的示例代码:
#define LOG Message(__FILE__, __LINE__,__func__)
class Message : public std::ostringstream
{
public:
Message(const char *param1, int param2, const char *param3)
{
*this<<param3<<"("<<param1<<":"<<param2<<")";
}
~Message()
{
*this<<endl;
cout<< rdbuf()->str();
}
};
int main()
{
int integer = 1;
string str = "XYZ";
LOG<<integer<<"DEBUGLOG1: "<<str<<" "<<integer;
return 0;
}
问题是如果我使用:
LOG << "LOG1: " << str << " " << integer;
输出打印 const char* "LOG1:" 的地址*,而不是值。
但是, 如果我使用:
LOG << integer << "DEBUGLOG1: " << str << " " << integer;
输出完美,打印整数值和字符值。
看起来不像使用ostream& operator<< (ostream& out, const char* s );
它正在使用ostream& operator<< (const void* val);?
任何人都可以解释一下可以做些什么来克服这种超载吗?
提前致谢
【问题讨论】:
-
你为什么不直接使用
#define LOG (std::cout << __FILE__ << __LINE__ << __func__)? -
谢谢,由于性能影响,这会标记我不能
标签: c++