매우 간단한 해결책을 제안하지만 C++ 14을 권장합니다. 나는 QTextStream이 방법 (단지 예로서 출력) 포장 것이다 :
#include <QTextStream>
#include <QFile>
class OutTeeTextStream
{
public:
OutTeeTextStream()
{
logfilestream = 0;
stdoutstream = new QTextStream(stdout);
file.setFileName("/tmp/outlog.log");
if(file.open(QFile::Append))
{
logfilestream = new QTextStream(&file);
}
}
~OutTeeTextStream()
{
file.close();
delete stdoutstream;
delete logfilestream;
}
OutTeeTextStream &operator<<(auto data)
{
(*stdoutstream) << data;
if(logfilestream != 0)
{
(*logfilestream) << data;
}
return (*this);
}
private:
QTextStream * stdoutstream;
QTextStream * logfilestream;
QFile file;
};
당신이 볼 수 있듯이
는, 래퍼는 두 QTextStream의 인스턴스를 포함하며, 기본적으로 그들 각각에 데이터를 브로드 캐스트 스트림 삽입 연산자를 제공합니다.
C++ 14 (예 : C++ 11)를 사용하지 않으면 매개 변수 선언에 'auto'를 사용하는 것에 대한 불만이 있습니다. 이 경우 모든 삽입 (및 추출) 연산자 오버로드 (QTextStream에서 약 15/17)를 선언/정의해야합니다.
리 팩토링은 모든 QTextStream (stdout)을 OutTeeTextStream()으로 대체하는 것으로 구성됩니다.
예, 스트림을 "tee"로하여 표준 입력/표준 출력 ** 대신 QTextStream에 제공하는 std :: streambuf에서 상속 한 클래스를 생성 할 수 있습니다. [간단한 하우투] (http : /wordaligned.org/articles/cpp-streambufs)는 실제로 "C++ tee streambuf"에 대한 Google의 첫 번째 Google 결과입니다. – user1810087