Wenn Sie einen Zeiger auf einen C ++ - Stream übergeben, wird seine Adresse in die Ausgabe eingefügt. (Offensichtlich, es sei denn, es gibt einen spezifischeren Ausgabehandler.)
%Vor%Dies kann ein Problem sein, wenn der Benutzer fälschlicherweise versuchte, den Wert von FooType zu drucken.
Und es ist auch ein Problem beim Mischen von Wide Char und Narrow Char, weil anstelle eines Compilerfehlers die Adresse gedruckt wird:
%Vor%Ich frage mich also - da ich sehr selten einen Pointer-Wert ausgeben möchte, wäre es möglich, die Formatierung von Pointer-Werten zu deaktivieren, so dass das Einfügen eines Pointer-Wertes in einen Stream zu einem Compiler-Fehler führen würde? / strong> (Die Ausgabe von Zeigerwerten könnte dann einfach durch Verwendung eines Wrappertyps oder durch Umsetzen der Zeigerwerte auf size_t oder dergleichen erfolgen.)
Bearbeiten: Im Lichte von Neils Antwort (Deaktivierung der void * -Ausgabe durch Angabe meines eigenen void * -Output-Operators) Ich möchte hinzufügen, dass es gut wäre, wenn dies auch für Tools wie Boost.Format funktioniert, die implizit den definierten Ausgabeoperator verwenden im std
namespace ...
Dies ergibt einen Kompilierungsfehler in g ++, wenn die zweite und / oder dritte Ausgabe von cout unkommentiert ist:
%Vor% Eine globale Template-Version von operator<<
scheint zu funktionieren:
Bearbeiten: Diese Lösung funktioniert nicht wie vorgesehen, da die Vorlage auch Zeichenfolgenliterale erfasst. Sie sollten @ Neils Lösung bevorzugen.