로깅에 사용되는 스트림을 보유하고 싶은 C++ 클래스가 있습니다.C++ 스트림을 멤버 변수로 사용
스트림 오브젝트의 구성 후에 세트 (그리고 아마도 리셋) 할 수 있어야한다.
스트림을 std::cout
으로 설정하거나 파일에 기록 할 파일 스트림 또는 데이터를 무시하는 것 이상의 아무것도 수행하지 않는 문자열 스트림 (예 : /dev/null
)으로 설정할 수 있어야합니다. 어쨌든 객체 유형은 ostream
이어야하며 객체 작성자는 언제든지 재설정 할 수 있습니다. 클래스 자체는 구체적인 스트림 유형을 알지 못합니다.
내가 ostream에 대한 포인터와 함께이 작업을 수행 할 수 있지만 다음 구문이 DEREF 연산자를 사용하는 데, 약간 성가신된다 :
(*m_log) << "message";
보다는
m_log << "message";
을하지만 내가 할 수있는 스트림 객체는 객체가 초기화 된 후에 재설정 될 필요가 있기 때문에 참조를 사용하지 않는다.
건설 후 재설정 할 수 여전히 즉, 포인터를 사용하지 않도록,이를하지만,하는 우아한 방법이 있나요?
에 살고 참조? ostream & mlog() {return * m_log;}의 과정을 따라 가십시오. 다음과 같이 작성하십시오 : mlog() << "message"; – fjardon
포인터를 사용하여'std :: ostream & o = * m_log;'함수로 시작하십시오. –
@ fjardon : 왜 작은 대답으로 제공하지 않습니까? ; P – Xeo