Ich habe einen OutputIterator für eine Antwort auf eine andere Frage
Das funktioniert gut für diese kleine Kopierfunktion:
%Vor% Aber es funktioniert überhaupt nicht für die STL copy
from algorithms
. Hier sind die wunderbaren C ++ - Fehler, die ich bekomme:
Hier ist der Treiber:
%Vor% Warum spezialisiert sich die Welt auf iterator_traits
? Was ist falsch an meinem Iterator? Kann ich nicht einfach meine eigenen einfachen Iteratoren schreiben?
Ihr Iterator erfüllt nicht die Anforderung für einen 'zuweisbaren' Typ, der eine Voraussetzung für einen Ausgabe-Iterator ist, da er eine Referenz und zuweisbare Typen enthält, um sicherzustellen, dass nach t = u
das t
gleich% co_de ist %.
Sie können eine geeignete Spezialisierung für u
für Ihren Iterator entweder durch Ableiten von einer Spezialisierung von iterator_traits
oder durch explizites Bereitstellen einer Spezialisierung bereitstellen.
Dies sollte mit iterator_traits
geschehen; eine Hilfsstruktur in <iterator>
, die alle Typen definiert, die ein Iterator typischerweise definieren sollte. Funktionen in <algorithm>
, beziehen Sie sich bei Bedarf auf diese Typen wie iterator_traits<it>::iterator_category
oder sagen iterator_traits<it>::value_type
usw. Wenn Sie sie nur innerhalb eines benutzerdefinierten Iterators definieren würden, wäre das der Trick. Dies ist die moderne Art, Iteratoren zu schreiben, im Gegensatz zur klassischen Art, von std::iterator
zu erben. Ein Blick auf <iterator>
zeigt, dass sogar std::iterator
diese Typen definiert, d. H. Iterator_category, difference_type usw. Dies ist der Grund dafür, dass die abgeleitete Iterator-Klasse, wenn sie von std::iterator
geerbt wird, diese aufgrund von Vererbung erhält.