사용자 지정 스트림 버퍼를 쓸 필요가 없습니다. 가장 간단하고 직접적인 방법은 제공하여 사용자가 출력을 보낼 수있는 클래스를 만드는 것입니다 그것을 플릿 단일 인수 운영자 < <() :
m_outstream 몇 가지 표준 유형 :: ostream에 (표준이다
template <typename T>
std::ostream& operator<<(const T& data_)
{
m_outstream << m_severity << "\t" << getTimeStamp() << "\t" << data_;
return m_outstream;
}
:: ofstream 등). m_severity 및 getTimeStamp()는 삽입 할 수있는 예제입니다 (심각도 유형을 ostream으로 형식화하고 출력하려면 bog 표준 두 개의 인자 연산자 < <()를 생성 할 수 있습니다).
myLogger << "failingFunction(" << argument <<
"): Could not do something." << std::endl;
과 같은 모습 m_outstream에 출력을 얻을 것이다 :
경고 2012-01-03 19시 32분 failingFunction ("인수를
이 다음과 같은 일을 할 수 있습니다 가치 ") : 뭔가를 할 수 없습니다.
이 외에도, 당신은 로거 클래스라는 방법을 사용하는 템플릿 사용 사업자 < <()를 추가로 간단하게 할 수있다 심각도를 설정하는 방법을 원할 것입니다. 정말 멋있어지기를 원한다면 setw()가 std :: ostream에서하는 것처럼 동작하는 자신 만의 조작기를 작성할 수 있습니다. 필기 조작기에 대한 입문서는 http://www.math.hkbu.edu.hk/parallel/pgi/doc/pgC++_lib/stdlibug/man_6665.htm을 참조하십시오.
나는 단순히 std :: ofstream을 감싸는 것이 좋습니다. 즉, std :: ofstream 멤버로 클래스를 만들 수 있습니다. – Aleph
이 항목의 이전 읽기에서 나는 지금 제거 된 답을 발견했습니다 : http://stackoverflow.com/questions/4366904/custom-stream-to-method-in-c/4372966#4372966 !!! –