Frage

Die Standardbibliothek enthält eine <iosfwd> Header, der (vorwärts) alle Streams einschließlich aller beliebig erklärt typedefs und definiert die char_traits Vorlage, einschließlich der Spezialisierungen.

Leider gibt es keine solche <stlfwd> Header, der (vorwärts) alle gemeinsamen STL -Datentypen und Funktionen erklärt vector, map, less, sort, usw. Noch traurig, Benutzercode darf solche Deklarationen nicht hinzufügen / typedefs an die std Namespace, gemäß

§17.4.3.1 [lib.reserved.names] p1:

Es ist undefiniert, dass ein C + + -Programm hinzugefügt wird Erklärungen oder Definitionen zum Namespace std oder Namespaces im Namespace std Falls nicht anders angegeben. Ein Programm kann Vorlagenspezialisierungen für jede Standardbibliotheksvorlage zum Namespace hinzufügen std.

Ja, das deckt den Fall von (Vorwärts-) Erklärungen ab, auch wenn die Typen bereits in der Standardbibliothek vorhanden sind. Natürlich werden sich die meisten (alle?) Compiler vollkommen normal verhalten, selbst wenn man solche Erklärungen hinzufügt, aber ein nicht definiertes Verhalten streng und Sprachanwälte spricht. Ich finde das besonders mühsam für typedefStandardbehälter wie:

// how to forward declare map and string?

typedef std::map<std::string, std::string> Attributes;

Kann dies nun als Defekt angesehen werden?

Ich meine sowohl die Nichtbelegung von a <stlfwd> Kopfball (oder besser, <stdfwd>, Deckung <iosfwd> auch) und das Verbot von Erklärungen, die bereits in der Standardbibliothek vorhanden sind.

Auch nach diese Frage, Wenn einer (vorwärts) den Standardcontainer, Algorithmen und Functors / Funktionen genau so deklariert, wie der Standard verlangt wird, sollte der Code perfekt gültig sein (wenn es nicht das Verbot von benutzerdefinierten Deklarationen in der std Namespace), da Implementierungen nicht versteckte/standardmäßige Vorlagenparameter hinzufügen können.

Ich frage das, weil ich darüber nachdenke, irgendwann einen Defektbericht darüber einzureichen.

War es hilfreich?

Lösung

Was wäre der Zweck der Vorwärtsbeschaffung von Sagen? less oder sort Oder wirklich irgendein anderer Algorithmus? Wenn Sie einen Allzweckalgorithmus verabschieden, wird er mit ziemlicher Sicherheit als Vorlagentyp sein und benötigen überhaupt keine Vorwärtsdeklaration.

Das lässt uns mit den Behältertypen. Es gibt definitionu003Ccontainerfwd> zum Beispiel einschließen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top