내 (단순한) log class에 스트림을 사용할 수 있도록 기능을 추가하려고합니다. 현재, 일부 수정 후, 나는 (내 cpp에있는)이있어 : 난 당신이 이미 가지고있는 m_log가 유효한 포인터 (결과를 확인하기 위해이 코드를 사용하고C++ 문자열 스트림의 끝을 얻는 방법?
내 "클라이언트"응용 프로그램에서 이제// 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;
}
) 추측 :
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();
에 해당 될 것이다 : 내가 필요한 것은 문자열의 주어진 증기가 완료 logText()를 호출하는 방법입니다 그것이 가능하다면. 내 첫번째 추측은이 같은 스트림의 끝에 표준 : ENDL를 사용할 수있을 것입니다 :
log << getName() << " : application created." << std::endl;
또는 이에 해당하지만, 그 스트림에 객체를 추가하지 않고 그것을 할 수 있는지 좋은 것.
아이디어가 있으십니까?
왜 로그 헤더
: 내 경우에는이 솔루션의 (작업 및 효과) 구현 logText()가 호출 될 때까지 지연하여 실제로 메시지를 기록합니까? – Ozan
예, addText()는 std :: stringstream을 채우지 만 logText()는 스트림의 문자열 결과를 "기록"하기 위해 일부 작업을 수행합니다. logText()는 문자열 값을 파일 및 표준 스트림에 기록하고 시간 정보를 추가하므로 "log"는 logText()가 호출 된 후에 만 수행되어야합니다. 텍스트가 비어 있으면 호출이 무시됩니다. – Klaim