Benutzerdefinierte Typen mit bereichsbasierten for-Schleifen kompatibel machen
Um die Verwendung bereichsbasierter for-Schleifen mit benutzerdefinierten Datentypen zu ermöglichen, müssen Sie Es gibt zwei Hauptoptionen:
Überlegungen zum Namespace:
Wenn sich Ihr benutzerdefinierter Typ in einem Namespace wie XML befindet, müssen Sie begin() und end() deklarieren funktioniert auch innerhalb dieses Namensraums. Es ist nicht erforderlich, xml::begin() oder std::begin() anzugeben.
Methodenanforderungen:
Die Anfangs-/End-Rückgabewerte sind nicht erforderlich Es müssen tatsächliche Iteratoren sein. Sie müssen jedoch bestimmte Anforderungen einhalten:
Bereichsbasierte for-Schleifenerweiterung:
Die bereichsbasierte for-Schleifensyntax for (range_declaration : range_expression) wird auf den folgenden Pseudocode erweitert:
{ auto &range = range_expression; for (auto begin = begin_expr, end = end_expr; begin != end; ++begin) { range_declaration = *begin; loop_statement } }
C 17 Entkoppeltes Ende Typen:
In C 17 wurde der bereichsbasierte for-Schleifen-erweiterte Pseudocode geändert in:
{ auto &range = range_expression; auto begin = begin_expr; auto end = end_expr; for (; begin != end; ++begin) { range_declaration = *begin; loop_statement } }
Diese Änderung ermöglicht, dass sich der End-Iteratortyp vom Anfangsiteratortyp unterscheidet. Es ermöglicht die Verwendung von „Sentinel“-Iteratoren, die nur Ungleichheitsvergleiche mit dem Iteratortyp „begin“ unterstützen.
Das obige ist der detaillierte Inhalt vonWie kann ich dafür sorgen, dass meine benutzerdefinierten Typen mit bereichsbasierten for-Schleifen in C funktionieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!