【发布时间】:2010-11-20 17:53:39
【问题描述】:
我正在向我的(简单)log class 添加函数,使其像流一样可用。 目前,经过一些修改,我得到了这个(在我的 cpp 中):
// blah blah blah...
// note: here String is a defined as: typedef std::string String;
void Log::logMessage( const String& message )
{
logText(); // to be sure we flush the current text if any (when "composing" a message)
addText( message );
logText(); // really log the message and make the current text empty
}
// blah blah blah...
Log& operator<<( Log& log, const std::stringstream& message )
{
log.logMessage( message.str() );
return log;
}
Log& operator<<( Log& log, const String& message )
{
log.addText( message );
return log;
}
现在在我的“客户端”应用程序中,我使用此代码检查结果(您已经猜到,m_log 是一个有效指针):
gcore::Log& log = *m_log;
log << getName() << " : application created.";
log << "This is a test for " << getName();
现在我遇到的问题是 logText()(和 logMessage)永远不会被调用,因为这个测试代码只会用字符串调用
log << getName() << " : application created.";
相当于
log.addText( getName() );
log.addText( " : application create." );
log.logText();
我不确定如何执行此操作,或者即使可能。我的第一个猜测是可以像这样在流的末尾使用 std::endl :
log << getName() << " : application created." << std::endl;
或等效的东西,但如果可以在不向流中添加对象的情况下做到这一点,那就太好了。
有什么想法吗?
【问题讨论】:
-
为什么延迟到 logText() 被调用,才能真正记录消息?
-
是的,addText() 将填充 std::stringstream 而 logText() 将做一些工作来“记录”流的字符串结果。 logText() 将字符串值写入文件和标准流中并添加一些时间信息,因此只有在调用 logText() 时才必须考虑完成“日志”。如果文本为空,则忽略调用。