Okay, I understand the mechanics. I am still not sure how I can apply this to my logger class, because I open a file and a text stream inside.
How can I return an instance that can go out of scope while still maintaining access to that file?
class Logger
{
public:
Logger();
~Logger();
void flush();
Logger
& operator<<
(const QString s
);
};
{
this->fileName = rl;
if (file.isOpen())
{
flush();
file.close();
}
file.setFileName(fileName);
stream.setDevice(&file);
}
Logger
& Logger
::operator<<
(const QString s
){
stream << " " << s;
return *this;
}
Logger& Logger::operator++()
{
stream << "\n";
stream.flush();
return *this;
}
class Logger
{
QFile file;
QTextStream stream;
QString fileName;
QMutex mutex;
public:
Logger();
Logger(QString rl);
~Logger();
void open(QString rl);
void flush();
Logger& operator<<(const QString s);
};
void Logger::open(QString rl)
{
this->fileName = rl;
if (file.isOpen())
{
flush();
file.close();
}
file.setFileName(fileName);
file.open(QFile::WriteOnly | QFile::Text);
stream.setDevice(&file);
}
Logger& Logger::operator<<(const QString s)
{
QMutexLocker locker(&mutex);
stream << " " << s;
return *this;
}
Logger& Logger::operator++()
{
QMutexLocker locker(&mutex);
stream << "\n";
stream.flush();
return *this;
}
To copy to clipboard, switch view to plain text mode
Logger logger("logs/birch.log");
logger << "one" << "two" << "three";
logger++; // <- explicit new line operator to get rid of.
Logger logger("logs/birch.log");
logger << "one" << "two" << "three";
logger++; // <- explicit new line operator to get rid of.
To copy to clipboard, switch view to plain text mode
Bookmarks