Kann eine Standardbibliotheksimplementierung Standardtypen spezialisieren?

8
Nehmen wir zum Beispiel für das Argument an, dass eine effizientere Implementierung (Speichern, Operationen darauf) für einen Vektor ganzzahliger Typen gefunden wird (im Vergleich zur generischen Vektorimplementierung). Kann eine standardkonforme Bibliothek Folgendes tun:

%Vor%

Ich denke, das wäre wegen des zusätzlichen Vorlagenparameters illegal.

Aber was ist mit einer kleinen Compiler-Magie: (abgesehen von der zusätzlichen Implementierungsarbeit) wäre so etwas erlaubt:

  • vector<integral_type, A> wird intern zugeordnet bis class vector_integral<T, A> while
  • vector<anything_else, A> wird intern zugeordnet in class vector<T, A> .

- Es handelt sich offensichtlich nicht um Spezialisierungen, die explizit im Standard erwähnt werden, wie std::vector<bool>

- Die Spezialisierung hätte offensichtlich die gleiche Schnittstelle und beobachtbares Verhalten.

- Lassen Sie uns concepts ignorieren, da sie noch nicht Standard sind. Es sei denn, du hast ein paar Fakten.

- Dies ist eine reine akademische Frage ( lesen persönliche Neugier).

    
bolov 03.07.2015, 15:40
quelle

1 Antwort

1

Solange die Implementierung der Standardbibliothek den Garantien des Standards entspricht, können Spezialisierungen vorgenommen werden. Diese Garantien beinhalten offensichtlich die Komplexität des Wachstums, Schnittstellenfunktionen und für bestimmte Klassen das interne Layout der Daten.

Die vector<bool> Spezialisierung ist meines Wissens im Standard enthalten, da sich ihr internes Datenlayout von der generischen vector<T> Bibliotheksklasse unterscheidet, daher muss sie vom Standard ausdrücklich zugelassen werden.

Der Standard sagt explizit 17.5.1.4 ad. 7 :

  

Die in den Bibliotheksklauseln angegebenen Komplexitätsanforderungen sind obere Grenzen und Implementierungen, die höhere Komplexitätsgarantien bieten, erfüllen die Anforderungen.

    
Tommy Andersen 03.07.2015 16:10
quelle