Ich habe mein eigenes Objekt std::cout
erstellt, das sowohl nach std::cout
als auch in eine Protokolldatei schreibt.Richtiger Weg zum Deklarieren/Definieren eines benutzerdefinierten Cout-ähnlichen Objekts
Ich definiere es gerade so in einer Header-Datei, aber ich bekomme ungenutzte variable Warnungen.
Header-Datei <MyLib/Log.h>
static LOut { };
static LOut lo;
template<typename T> inline LOut& operator<<(LOut& mLOut, const T& mValue)
{
std::string str{toStr(mValue)};
std::cout << str;
getLogStream() << str;
return mLOut;
}
Verbrauch:
#include <MyLib/Log.h>
...
lo << "hello!" << std::endl;
lo
static
werden sollte? Sollte lo
extern
sein?
Kudos zur Erklärung der korrekten Art und Weise, ein cout
-ähnliches Objekt zu deklarieren und zu zeigen, wie es die Haupt-Standardbibliothek-Implementierungen tun.
Edit: von cout
-ähnlichen Objekt, meine ich eine globale Variable, die nach einschließlich der entsprechenden Kopf immer verfügbar ist.
'std :: cout' ist in der Regel nur ein' std :: ostream' irgendeiner Art, mit einigen speziellen Logik, um sicherzustellen, dass es früh genug initialisiert und nie zerstört wird; zumindest ein Compiler, den ich kenne, verwendet spezielle Erweiterungen, um dies zu erreichen. Aber du brauchst es normalerweise nicht; Wenn es schlimmer wird, können Sie ein Singleton verwenden und 'log() << ...' schreiben. –