Deaktivieren der Zeigerausgabe in C ++ - Streams?

8

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 ...

    
Martin Ba 23.05.2011, 07:49
quelle

4 Antworten

3

Dies ergibt einen Kompilierungsfehler in g ++, wenn die zweite und / oder dritte Ausgabe von cout unkommentiert ist:

%Vor%     
Neil Butterworth 23.05.2011, 07:55
quelle
4

Eine globale Template-Version von operator<< scheint zu funktionieren:

%Vor%

Bearbeiten: Diese Lösung funktioniert nicht wie vorgesehen, da die Vorlage auch Zeichenfolgenliterale erfasst. Sie sollten @ Neils Lösung bevorzugen.

    
Björn Pollex 23.05.2011 07:55
quelle
1

Ja, Sie können einen Kompilierungsfehler verursachen, indem Sie eine eigene Überladung des ostream-Operators & lt; & lt;.

bereitstellen %Vor%     
xDD 23.05.2011 07:58
quelle
0

Behalten Sie die operator << für Zeiger nicht implementiert.

%Vor%

Bearbeiten : Oder besser einen ungültigen Typnamen eingeben, um einen Compilerfehler zu bekommen.

    
iammilind 23.05.2011 08:05
quelle

Tags und Links