Frage

class logger {
 ....
};

logger& operator<<(logger& log, const std::string& str)
{
    cout << "My Log: " << str << endl;
    return log;
}

logger log;
log << "Lexicon Starting";

funktioniert gut, aber ich möchte stattdessen einen Zeiger auf eine Instanz der Klasse verwenden. d.

logger * log = new log();
log << "Lexicon Starting";

Ist das möglich? Wenn ja, was ist die Syntax? Dank

Edit: Der Compiler Fehler ist

error: invalid operands of types 'logger*' and 'const char [17]' to binary 'operator<<'
War es hilfreich?

Lösung

Sie müßten dereferenzieren die Zeiger auf Logger-Objekt und natürlich überprüfen, ob es so nicht 0 Irgendwas sollte die Arbeit machen:


  log && ((*log) << "Lexicon starting")

Als allgemeine beiseite, würde ich von Verweisen auf Objekte wie ein Logger scheuen (die man normalerweise bedingungslos erwarten anwesend zu sein) über einen Zeiger auf Grund der Unsicherheit Sie mit einem Zeiger zu bekommen, ist AKA ein Objekt vorhanden ist oder nicht?

Andere Tipps

Hier ist die Art und Weise:

logger * log = new log();
(*log) << "Lexicon Starting";

Warum nicht eine Referenz verwenden?

logger & log = *(new log()); 
// the above is abhorrent code that 
// should be replaced by something meaningful

log << "Lexicon Starting";

, wenn dies nicht das, was Sie wollen, ich mit gehen würde Timo Geusch , auch wenn es hässlich

Je nach Kontext, in dem Sie Ihren Logger erhalten aus, könnten Sie einen Verweis anstelle eines Zeigers zurückkehren wollen:

...
Logger& logger() {
    return *_pLogger;
}
...

Logger& log = logger();
log << "...";

Nicht wirklich. new log( ) hat Zeigertyp hat "Lexicon starting" const char[16] eingeben. Sie können nur Betreiber überlasten, wenn mindestens ein Argument einen benutzerdefinierten Typ hat.

decasteljau richtig bemerkt, dass Sie dies über (*log) tun könnten, wenn Sie den Zeiger wollen. Ich mag es nicht den Zeiger, aber. Andrei Alexandrescu widmet schon einige Seiten auf Smart Logger Singletons in "Moderne C ++ Design", könnte sich lohnen, dass zu konsultieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top