Mam klasę C++, którą chciałbym przechowywać strumień używany do logowania.Strumień C++ jako zmienna składowa
Strumień powinien móc być ustawiony (i ewentualnie zresetowany) po skonstruowaniu obiektu.
Powinno być możliwe ustawienie strumienia jako std::cout
, lub jako strumień plików do zalogowania się do pliku, lub jako strumień tekstowy, który nie powoduje nic więcej niż zignorowanie danych (sortowanie /dev/null
). W każdym razie powinien to być obiekt typu ostream
, który twórca obiektu może zresetować w dowolnym momencie. Klasa sama w sobie nie jest świadoma rodzaju strumienia betonu.
mógłbym tego dokonać za pomocą wskaźnika do ostream, ale składnia staje się trochę denerwujące, konieczności użycia operatora deref:
(*m_log) << "message";
zamiast
m_log << "message";
ale mogę Używaj referencji, ponieważ obiekt strumienia musi zostać ewentualnie zresetowany po zainicjowaniu obiektu.
Czy istnieje elegancki sposób, aby to osiągnąć, tj. Uniknąć stosowania wskaźników, ale nadal można zresetować po zakończeniu budowy?
Dlaczego nie zapewniają niewielką funkcję składową powracającego odniesienie do strumienia? coś na drodze: ostream & mlog() {return * m_log;}. Napisalibyśmy wtedy: mlog() << "wiadomość"; – fjardon
Użyj wskaźnika i zacznij swoją funkcję od 'std :: ostream & o = * m_log;'. –
@fjardon: Dlaczego nie podasz tego jako małą odpowiedź? ; P – Xeo