Warum muss ostream_iterator den Typ der auszugebenden Objekte explizit deklarieren?

10

Im aktuellen C ++ wurde die Klasse ostream_iterator wie folgt entworfen:

%Vor%

Für mich ist dieses Design suboptimal. Weil der Benutzer den Typ T angeben muss, wenn er einen ostream_iterator wie folgt deklariert: ostream_iterator<int> oi(cout); Tatsächlich kann cout einen beliebigen Objekttyp als sein Argument annehmen und nicht nur einen Typ. Dies ist eine offensichtliche Einschränkung.

%Vor%

Jetzt können wir es wie folgt verwenden:

%Vor%

Ich denke, es ist generischer und eleganter als

%Vor%

Habe ich Recht?

    
xmllmx 02.12.2010, 08:41
quelle

4 Antworten

2
___ antwort4333254 ___

Es scheint, dass Sie Recht haben könnten.

Mal sehen, ob wir einen ostream_iterator konstruieren können, der kein Template-Argument benötigt.

Der Iterator kopiert Werte, also *iter = x; ++iter; Der Iterator schummelt, indem er den Operator * selbst zurückgibt und ++iter ebenfalls selbst zurückgibt, ohne irgendeinen Status zu ändern. Die "Magie" ist im Operator =, der die Ausgabe durchführt.

Der "cout" muss ein Klassenmitglied vom Typ ostream * sein. Es muss ein Zeiger sein, da Iteratoren zuweisbar sein müssen, daher weisen wir das Mitglied (nennen wir es os) der Adresse des übergebenen Stroms zu.

Also würden wir Operator = auf diese Weise überladen:

%Vor%

Beachten Sie, dass der templated-Operator = nicht oveload operator = (our_ostream_iterator const & amp;) sein sollte, was spezialisierter als die Vorlage ist.

Sie möchten immer noch eine Vorlage für den Elementtyp, also nennen wir das our_basic_ostream_iterator

ostream_iterator würde immer noch eine Vorlagenklasse für seinen Elementtyp bleiben. Also:

%Vor%

und dann natürlich

%Vor%     
___ antwort4333189 ___

Ich denke, der Grund ist, dass es auch andere Mitglieder gibt. Offensichtlich muss der gesamte Satz von Elementfunktionen in ihrem Verhalten für eine gegebene Menge von T- und anderen Vorlagenargumenten konsistent sein.

Es besteht die Gefahr, dass %code% für eine Reihe von Vorlagenargumenten instanziiert wird, die sich von denen unterscheidet, die zum Instanziieren von %code% oder %code%

verwendet werden

Daher sind die einzelnen Methoden keine Vorlage selbst und vielmehr ist die gesamte Klasse eine Vorlage, also stellen Sie einheitliche T- und andere Vorlagenargumente sicher.

    
___ answer32929160 ___

Die einfache Antwort ist, dass %code% assoziierte Typen haben und %code% konzeptionell gegen das Konzept eines Interators verstößt, indem ein %code% benötigt wird, auch wenn es nicht notwendig ist. (Dies ist basicalt @ pts Antwort)

Was Sie vorschlagen, hängt mit der Idee hinter den neuen "transparenten Operatoren" zusammen, wie dem neuen %code% . Welche bestehen in einer speziellen Instanziierung, deren Mitgliedsfunktion einen verzögerten Typ Abzug hat.

Es ist auch abwärtskompatibel, weil %code% zu Beginn nicht sinnvoll ist. Außerdem ist der Parameter %code% ebenfalls der Standardwert. Zum Beispiel %code% ist die neue Deklaration.

Eine mögliche Implementierung eines transparenten %code%

Zurück von %code% , ein wichtiger Test ist, ob wir es mit %code% arbeiten wollen, da %code% normalerweise verwendet wird:

%Vor%

Die Technologie für eine transparente %code% ist noch nicht da, denn das schlägt fehl:

%Vor%

Damit dies funktioniert, kann die Instanz %code% explizit definiert werden. (Dies schließt die Antwort von @CashCow ab)

%Vor%

Jetzt funktioniert das:

%Vor%

Wenn wir das Standard-Komitee darüber hinaus dazu bringen, den Standardparameter %code% zu verwenden (wie bei %code% ): %code% , wir könnten einen Schritt weiter gehen und den Parameter komplett weglassen:

%Vor%

Die Wurzel des Problems und ein möglicher Ausweg

Schließlich, meiner Meinung nach, könnte das Problem auch konzeptuell sein, in STL erwartet man, dass ein Iterator eine bestimmte %code% assoziiert, auch wenn es nicht wie hier notwendig ist. In gewissem Sinne verletzt %code% einige Konzepte eines Iterators.

Also gibt es zwei Dinge, die konzeptionell falsch sind in dieser Verwendung: 1) wenn man kopiert, erwartet man den Typ der Quelle zu kennen (Container %code% ) und Zieltypen 2) kopiert man überhaupt nichts !. Meiner Meinung nach gibt es in dieser typischen Anwendung einen doppelten Konstruktionsfehler. Es sollte ein %code% vorhanden sein, das direkt mit einem Template shift %code% operators arbeitet, anstatt %code% redirect auf %code% als %code% zu setzen.

%Vor%

(Das letzte Argument sollte eine Art %code% Konzept erfüllen).

** Verwenden Sie stattdessen %code% und eine mögliche Implementierung von %code% **

Aus konzeptioneller Sicht ist das Senden von Objekten an einen Stream eher eine "akkumulieren" Operation als ein Kopieroperator, also sollte %code% im Prinzip eine geeignetere Kandidat sein, außerdem brauchen wir kein "Ziel" Iteratoren dafür. Das Problem besteht darin, dass %code% keine Kopien von jedem Objekt erstellen möchte, das akkumuliert wird, also funktioniert das nicht:

%Vor%

Damit es funktioniert, müssen wir etwas %code% magic machen:

%Vor%

Schließlich kann der Code vereinfacht werden, indem das Äquivalent von %code% für den Shift-Operator verwendet wird, in modernem C ++ sollte dies wie folgt aussehen:

%Vor%

Was kann verwendet werden als:

%Vor%

Schließlich können wir definieren:

%Vor%

Was kann als

verwendet werden? %Vor%

Schließlich gibt es kein Dilemma über den Typ von %code% hier.

    
___ antwort4333168 ___

Ja, Sie haben Recht. Es wäre flexibler, wie Sie vorschlagen. Die Art und Weise, wie es entworfen wird, passt jedoch besser zur Verwendung von Iteratoren durch STL: ein Iteratortyp für den Datentyp (T).

    
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ qstntxt ___

Im aktuellen C ++ wurde die Klasse ostream_iterator wie folgt entworfen:

%Vor%

Für mich ist dieses Design suboptimal. Weil der Benutzer den Typ T angeben muss, wenn er einen ostream_iterator wie folgt deklariert: %code% Tatsächlich kann cout einen beliebigen Objekttyp als sein Argument annehmen und nicht nur einen Typ. Dies ist eine offensichtliche Einschränkung.

%Vor%

Jetzt können wir es wie folgt verwenden:

%Vor%

Ich denke, es ist generischer und eleganter als

%Vor%

Habe ich Recht?

    
___ tag123stream ___ Ein Stream ist eine Reihe von Datenelementen, auf die seriell zugegriffen werden kann. Verwenden Sie für die neue Stream-API von Java 8 stattdessen das Java-Stream-Tag. ___ qstnhdr ___ Warum muss ostream_iterator den Typ der auszugebenden Objekte explizit deklarieren? ___
CashCow 02.12.2010, 09:03
quelle
2

Die einfache Antwort ist, dass iterator assoziierte Typen haben und ostream_iterator konzeptionell gegen das Konzept eines Interators verstößt, indem ein value_type benötigt wird, auch wenn es nicht notwendig ist. (Dies ist basicalt @ pts Antwort)

Was Sie vorschlagen, hängt mit der Idee hinter den neuen "transparenten Operatoren" zusammen, wie dem neuen std::plus<void> . Welche bestehen in einer speziellen Instanziierung, deren Mitgliedsfunktion einen verzögerten Typ Abzug hat.

Es ist auch abwärtskompatibel, weil void zu Beginn nicht sinnvoll ist. Außerdem ist der Parameter void ebenfalls der Standardwert. Zum Beispiel template<T = void> struct std::plus{...} ist die neue Deklaration.

Eine mögliche Implementierung eines transparenten ostream_iterator

Zurück von std::ostream_iterator , ein wichtiger Test ist, ob wir es mit std::copy arbeiten wollen, da std::ostream_iterator normalerweise verwendet wird:

%Vor%

Die Technologie für eine transparente std::ostream_iterator ist noch nicht da, denn das schlägt fehl:

%Vor%

Damit dies funktioniert, kann die Instanz void explizit definiert werden. (Dies schließt die Antwort von @CashCow ab)

%Vor%

Jetzt funktioniert das:

%Vor%

Wenn wir das Standard-Komitee darüber hinaus dazu bringen, den Standardparameter void zu verwenden (wie bei std::plus ): template<class T = void, ...> struct ostream_iterator{...} , wir könnten einen Schritt weiter gehen und den Parameter komplett weglassen:

%Vor%

Die Wurzel des Problems und ein möglicher Ausweg

Schließlich, meiner Meinung nach, könnte das Problem auch konzeptuell sein, in STL erwartet man, dass ein Iterator eine bestimmte value_type assoziiert, auch wenn es nicht wie hier notwendig ist. In gewissem Sinne verletzt ostream_iterator einige Konzepte eines Iterators.

Also gibt es zwei Dinge, die konzeptionell falsch sind in dieser Verwendung: 1) wenn man kopiert, erwartet man den Typ der Quelle zu kennen (Container value_type ) und Zieltypen 2) kopiert man überhaupt nichts !. Meiner Meinung nach gibt es in dieser typischen Anwendung einen doppelten Konstruktionsfehler. Es sollte ein std::send vorhanden sein, das direkt mit einem Template shift << operators arbeitet, anstatt = redirect auf << als ostream_iterator zu setzen.

%Vor%

(Das letzte Argument sollte eine Art Sink Konzept erfüllen).

** Verwenden Sie stattdessen std::accumulate und eine mögliche Implementierung von std::send **

Aus konzeptioneller Sicht ist das Senden von Objekten an einen Stream eher eine "akkumulieren" Operation als ein Kopieroperator, also sollte std::accumulate im Prinzip eine geeignetere Kandidat sein, außerdem brauchen wir kein "Ziel" Iteratoren dafür. Das Problem besteht darin, dass std::accumulate keine Kopien von jedem Objekt erstellen möchte, das akkumuliert wird, also funktioniert das nicht:

%Vor%

Damit es funktioniert, müssen wir etwas reference_wrapper magic machen:

%Vor%

Schließlich kann der Code vereinfacht werden, indem das Äquivalent von std::plus für den Shift-Operator verwendet wird, in modernem C ++ sollte dies wie folgt aussehen:

%Vor%

Was kann verwendet werden als:

%Vor%

Schließlich können wir definieren:

%Vor%

Was kann als

verwendet werden? %Vor%

Schließlich gibt es kein Dilemma über den Typ von output_iterator hier.

    
alfC 04.10.2015 01:25
quelle
1
___ antwort4333254 ___

Es scheint, dass Sie Recht haben könnten.

Mal sehen, ob wir einen ostream_iterator konstruieren können, der kein Template-Argument benötigt.

Der Iterator kopiert Werte, also operator < Der Iterator schummelt, indem er den Operator * selbst zurückgibt und operator * ebenfalls selbst zurückgibt, ohne irgendeinen Status zu ändern. Die "Magie" ist im Operator =, der die Ausgabe durchführt.

Der "cout" muss ein Klassenmitglied vom Typ ostream * sein. Es muss ein Zeiger sein, da Iteratoren zuweisbar sein müssen, daher weisen wir das Mitglied (nennen wir es os) der Adresse des übergebenen Stroms zu.

Also würden wir Operator = auf diese Weise überladen:

%Vor%

Beachten Sie, dass der templated-Operator = nicht oveload operator = (our_ostream_iterator const & amp;) sein sollte, was spezialisierter als die Vorlage ist.

Sie möchten immer noch eine Vorlage für den Elementtyp, also nennen wir das operator++

ostream_iterator würde immer noch eine Vorlagenklasse für seinen Elementtyp bleiben. Also:

%Vor%

und dann natürlich

%Vor%     
___ antwort4333189 ___

Ich denke, der Grund ist, dass es auch andere Mitglieder gibt. Offensichtlich muss der gesamte Satz von Elementfunktionen in ihrem Verhalten für eine gegebene Menge von T- und anderen Vorlagenargumenten konsistent sein.

Es besteht die Gefahr, dass %code% für eine Reihe von Vorlagenargumenten instanziiert wird, die sich von denen unterscheidet, die zum Instanziieren von %code% oder %code%

verwendet werden

Daher sind die einzelnen Methoden keine Vorlage selbst und vielmehr ist die gesamte Klasse eine Vorlage, also stellen Sie einheitliche T- und andere Vorlagenargumente sicher.

    
___ answer32929160 ___

Die einfache Antwort ist, dass %code% assoziierte Typen haben und %code% konzeptionell gegen das Konzept eines Interators verstößt, indem ein %code% benötigt wird, auch wenn es nicht notwendig ist. (Dies ist basicalt @ pts Antwort)

Was Sie vorschlagen, hängt mit der Idee hinter den neuen "transparenten Operatoren" zusammen, wie dem neuen %code% . Welche bestehen in einer speziellen Instanziierung, deren Mitgliedsfunktion einen verzögerten Typ Abzug hat.

Es ist auch abwärtskompatibel, weil %code% zu Beginn nicht sinnvoll ist. Außerdem ist der Parameter %code% ebenfalls der Standardwert. Zum Beispiel %code% ist die neue Deklaration.

Eine mögliche Implementierung eines transparenten %code%

Zurück von %code% , ein wichtiger Test ist, ob wir es mit %code% arbeiten wollen, da %code% normalerweise verwendet wird:

%Vor%

Die Technologie für eine transparente %code% ist noch nicht da, denn das schlägt fehl:

%Vor%

Damit dies funktioniert, kann die Instanz %code% explizit definiert werden. (Dies schließt die Antwort von @CashCow ab)

%Vor%

Jetzt funktioniert das:

%Vor%

Wenn wir das Standard-Komitee darüber hinaus dazu bringen, den Standardparameter %code% zu verwenden (wie bei %code% ): %code% , wir könnten einen Schritt weiter gehen und den Parameter komplett weglassen:

%Vor%

Die Wurzel des Problems und ein möglicher Ausweg

Schließlich, meiner Meinung nach, könnte das Problem auch konzeptuell sein, in STL erwartet man, dass ein Iterator eine bestimmte %code% assoziiert, auch wenn es nicht wie hier notwendig ist. In gewissem Sinne verletzt %code% einige Konzepte eines Iterators.

Also gibt es zwei Dinge, die konzeptionell falsch sind in dieser Verwendung: 1) wenn man kopiert, erwartet man den Typ der Quelle zu kennen (Container %code% ) und Zieltypen 2) kopiert man überhaupt nichts !. Meiner Meinung nach gibt es in dieser typischen Anwendung einen doppelten Konstruktionsfehler. Es sollte ein %code% vorhanden sein, das direkt mit einem Template shift %code% operators arbeitet, anstatt %code% redirect auf %code% als %code% zu setzen.

%Vor%

(Das letzte Argument sollte eine Art %code% Konzept erfüllen).

** Verwenden Sie stattdessen %code% und eine mögliche Implementierung von %code% **

Aus konzeptioneller Sicht ist das Senden von Objekten an einen Stream eher eine "akkumulieren" Operation als ein Kopieroperator, also sollte %code% im Prinzip eine geeignetere Kandidat sein, außerdem brauchen wir kein "Ziel" Iteratoren dafür. Das Problem besteht darin, dass %code% keine Kopien von jedem Objekt erstellen möchte, das akkumuliert wird, also funktioniert das nicht:

%Vor%

Damit es funktioniert, müssen wir etwas %code% magic machen:

%Vor%

Schließlich kann der Code vereinfacht werden, indem das Äquivalent von %code% für den Shift-Operator verwendet wird, in modernem C ++ sollte dies wie folgt aussehen:

%Vor%

Was kann verwendet werden als:

%Vor%

Schließlich können wir definieren:

%Vor%

Was kann als

verwendet werden? %Vor%

Schließlich gibt es kein Dilemma über den Typ von %code% hier.

    
___ antwort4333168 ___

Ja, Sie haben Recht. Es wäre flexibler, wie Sie vorschlagen. Die Art und Weise, wie es entworfen wird, passt jedoch besser zur Verwendung von Iteratoren durch STL: ein Iteratortyp für den Datentyp (T).

    
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ qstntxt ___

Im aktuellen C ++ wurde die Klasse ostream_iterator wie folgt entworfen:

%Vor%

Für mich ist dieses Design suboptimal. Weil der Benutzer den Typ T angeben muss, wenn er einen ostream_iterator wie folgt deklariert: %code% Tatsächlich kann cout einen beliebigen Objekttyp als sein Argument annehmen und nicht nur einen Typ. Dies ist eine offensichtliche Einschränkung.

%Vor%

Jetzt können wir es wie folgt verwenden:

%Vor%

Ich denke, es ist generischer und eleganter als

%Vor%

Habe ich Recht?

    
___ tag123stream ___ Ein Stream ist eine Reihe von Datenelementen, auf die seriell zugegriffen werden kann. Verwenden Sie für die neue Stream-API von Java 8 stattdessen das Java-Stream-Tag. ___ qstnhdr ___ Warum muss ostream_iterator den Typ der auszugebenden Objekte explizit deklarieren? ___
Chubsdad 02.12.2010 08:52
quelle
0
___ antwort4333254 ___

Es scheint, dass Sie Recht haben könnten.

Mal sehen, ob wir einen ostream_iterator konstruieren können, der kein Template-Argument benötigt.

Der Iterator kopiert Werte, also %code% Der Iterator schummelt, indem er den Operator * selbst zurückgibt und %code% ebenfalls selbst zurückgibt, ohne irgendeinen Status zu ändern. Die "Magie" ist im Operator =, der die Ausgabe durchführt.

Der "cout" muss ein Klassenmitglied vom Typ ostream * sein. Es muss ein Zeiger sein, da Iteratoren zuweisbar sein müssen, daher weisen wir das Mitglied (nennen wir es os) der Adresse des übergebenen Stroms zu.

Also würden wir Operator = auf diese Weise überladen:

%Vor%

Beachten Sie, dass der templated-Operator = nicht oveload operator = (our_ostream_iterator const & amp;) sein sollte, was spezialisierter als die Vorlage ist.

Sie möchten immer noch eine Vorlage für den Elementtyp, also nennen wir das %code%

ostream_iterator würde immer noch eine Vorlagenklasse für seinen Elementtyp bleiben. Also:

%Vor%

und dann natürlich

%Vor%     
___ antwort4333189 ___

Ich denke, der Grund ist, dass es auch andere Mitglieder gibt. Offensichtlich muss der gesamte Satz von Elementfunktionen in ihrem Verhalten für eine gegebene Menge von T- und anderen Vorlagenargumenten konsistent sein.

Es besteht die Gefahr, dass %code% für eine Reihe von Vorlagenargumenten instanziiert wird, die sich von denen unterscheidet, die zum Instanziieren von %code% oder %code%

verwendet werden

Daher sind die einzelnen Methoden keine Vorlage selbst und vielmehr ist die gesamte Klasse eine Vorlage, also stellen Sie einheitliche T- und andere Vorlagenargumente sicher.

    
___ answer32929160 ___

Die einfache Antwort ist, dass %code% assoziierte Typen haben und %code% konzeptionell gegen das Konzept eines Interators verstößt, indem ein %code% benötigt wird, auch wenn es nicht notwendig ist. (Dies ist basicalt @ pts Antwort)

Was Sie vorschlagen, hängt mit der Idee hinter den neuen "transparenten Operatoren" zusammen, wie dem neuen %code% . Welche bestehen in einer speziellen Instanziierung, deren Mitgliedsfunktion einen verzögerten Typ Abzug hat.

Es ist auch abwärtskompatibel, weil %code% zu Beginn nicht sinnvoll ist. Außerdem ist der Parameter %code% ebenfalls der Standardwert. Zum Beispiel %code% ist die neue Deklaration.

Eine mögliche Implementierung eines transparenten %code%

Zurück von %code% , ein wichtiger Test ist, ob wir es mit %code% arbeiten wollen, da %code% normalerweise verwendet wird:

%Vor%

Die Technologie für eine transparente %code% ist noch nicht da, denn das schlägt fehl:

%Vor%

Damit dies funktioniert, kann die Instanz %code% explizit definiert werden. (Dies schließt die Antwort von @CashCow ab)

%Vor%

Jetzt funktioniert das:

%Vor%

Wenn wir das Standard-Komitee darüber hinaus dazu bringen, den Standardparameter %code% zu verwenden (wie bei %code% ): %code% , wir könnten einen Schritt weiter gehen und den Parameter komplett weglassen:

%Vor%

Die Wurzel des Problems und ein möglicher Ausweg

Schließlich, meiner Meinung nach, könnte das Problem auch konzeptuell sein, in STL erwartet man, dass ein Iterator eine bestimmte %code% assoziiert, auch wenn es nicht wie hier notwendig ist. In gewissem Sinne verletzt %code% einige Konzepte eines Iterators.

Also gibt es zwei Dinge, die konzeptionell falsch sind in dieser Verwendung: 1) wenn man kopiert, erwartet man den Typ der Quelle zu kennen (Container %code% ) und Zieltypen 2) kopiert man überhaupt nichts !. Meiner Meinung nach gibt es in dieser typischen Anwendung einen doppelten Konstruktionsfehler. Es sollte ein %code% vorhanden sein, das direkt mit einem Template shift %code% operators arbeitet, anstatt %code% redirect auf %code% als %code% zu setzen.

%Vor%

(Das letzte Argument sollte eine Art %code% Konzept erfüllen).

** Verwenden Sie stattdessen %code% und eine mögliche Implementierung von %code% **

Aus konzeptioneller Sicht ist das Senden von Objekten an einen Stream eher eine "akkumulieren" Operation als ein Kopieroperator, also sollte %code% im Prinzip eine geeignetere Kandidat sein, außerdem brauchen wir kein "Ziel" Iteratoren dafür. Das Problem besteht darin, dass %code% keine Kopien von jedem Objekt erstellen möchte, das akkumuliert wird, also funktioniert das nicht:

%Vor%

Damit es funktioniert, müssen wir etwas %code% magic machen:

%Vor%

Schließlich kann der Code vereinfacht werden, indem das Äquivalent von %code% für den Shift-Operator verwendet wird, in modernem C ++ sollte dies wie folgt aussehen:

%Vor%

Was kann verwendet werden als:

%Vor%

Schließlich können wir definieren:

%Vor%

Was kann als

verwendet werden? %Vor%

Schließlich gibt es kein Dilemma über den Typ von %code% hier.

    
___ antwort4333168 ___

Ja, Sie haben Recht. Es wäre flexibler, wie Sie vorschlagen. Die Art und Weise, wie es entworfen wird, passt jedoch besser zur Verwendung von Iteratoren durch STL: ein Iteratortyp für den Datentyp (T).

    
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ qstntxt ___

Im aktuellen C ++ wurde die Klasse ostream_iterator wie folgt entworfen:

%Vor%

Für mich ist dieses Design suboptimal. Weil der Benutzer den Typ T angeben muss, wenn er einen ostream_iterator wie folgt deklariert: %code% Tatsächlich kann cout einen beliebigen Objekttyp als sein Argument annehmen und nicht nur einen Typ. Dies ist eine offensichtliche Einschränkung.

%Vor%

Jetzt können wir es wie folgt verwenden:

%Vor%

Ich denke, es ist generischer und eleganter als

%Vor%

Habe ich Recht?

    
___ tag123stream ___ Ein Stream ist eine Reihe von Datenelementen, auf die seriell zugegriffen werden kann. Verwenden Sie für die neue Stream-API von Java 8 stattdessen das Java-Stream-Tag. ___ qstnhdr ___ Warum muss ostream_iterator den Typ der auszugebenden Objekte explizit deklarieren? ___
pts 02.12.2010 08:49
quelle

Tags und Links