Frage

Ich weiß, dass Funktionsvorlagen verwendet werden, um die Funktionen tragbar und so zu machen, dass sie mit beliebigen Datentypen verwendet werden könnten.

auch Explizite Spezialisierung die Vorlagen erfolgt, wenn wir eine effizientere Implementierung für einen bestimmten Datentyp haben.

Aber dann anstelle von Explizite Spezialisierung Wir könnten auch nur Code ein nichtcodierende Funktion , die von main bezeichnen könnte. Dies würde uns einige Verarbeitungszeit sparen als der Compiler nichtcodierende Funktionen schneller als Explizit Specialized Templated Funktionen finden würde, die in Bezug auf die Effizienz wiederum besser würde.

Also, warum verwenden wir Explizite Spezialisierung , wenn wir die Alternative nur anrufen haben nichtcodierende Funktionen

Bitte korrigieren Sie mich, wenn ich falsch!

Bearbeiten 1: Mir wurde von meinem Professor gesagt, dass, wenn wir Funktionsschablonen und rufen Sie die Funktion von main, die Compiler suchen zuerst für eine Templat-Funktion und wenn sie nicht in der Lage zu lokalisieren, dass zu machen, dann sucht er nach einer Funktionsvorlage, aus der sie wiederum macht eine Templat-Funktion und ruft dann für sie.

War es hilfreich?

Lösung

Es klingt wie Sie verwirrend Kompilierung-Effizienz mit Laufzeiteffizienz. Die Wahl, welche Funktion Anruf bei der Kompilierung durchgeführt wird, keine Zeit laufen, so dass es keinen Unterschied zur Laufzeit des Programms machen.

Explizite Spezialisierung wird verwendet, wenn Sie einen speziellen Fall haben, die von spezieller Behandlung profitieren kann. Manchmal wird diese nach hinten los, wie im Fall von std::vector<bool>, während anderen Zeiten ist es ganz praktisch ist. Es bedeutet, dass der Benutzer der Funktion nicht bewusst sein muss, dass es ein besonderer Fall ist; es ist nur transparent sein.

Andere Tipps

  

Dies würde uns einige Verarbeitungszeit als Compiler speichern würde schneller Globale Funktionen finden als Explizit Specialized Templated Funktionen, die in Bezug auf die Effizienz wiederum besser würde.

Warum sollte der Compiler eine nichtcodierende Funktion schneller als eine Funktion Vorlage Spezialisierung finden? Haben Sie gebenchmarkt Compiler Performance diese Aussage zu überprüfen? Wenn Sie eine Funktion namens f verwenden, immer der Compiler hat eine Reihe von Kandidaten-Funktionen zu erstellen und durchzuführen, die Überladungsauflösung der korrekte Funktion zu bestimmen, verwendet werden.

Zur Laufzeit (das ist, wenn die Leistung wirklich zählt, nicht wahr?) Die Leistung einer Funktion Vorlage Instanziierung Aufruf sollte besser sein nicht als die Leistung eines nichtcodierende Funktion aufrufen.

  

Also, warum verwenden wir Explizite Spezialisierung, wenn wir die Alternative haben nur anrufen Globale Funktionen?

Im allgemeinen Fall, für Funktionsschablonen, Sie verwenden Sie keine explizite Spezialisierung, weil es in der Regel ist verwirrend und schwierig. Die ISO C ++ Standard hat eine poetische Warnung äußerst vorsichtig sein, wenn Funktionsschablonen spezialisiert. Sie können Herb Sutter „Why Not Spezialisieren Funktion Templates?“ für eine gute Erklärung für das Lesen Fragen, warum Sie nicht wollen, Funktionsschablonen spezialisieren.

Aus Gründen der Einheitlichkeit. Die Person, mit der API nur ruft Methoden mit bestimmten Argumenten, einige die generische Funktion einige explizit spezielle Funktionen erhalten erhalten - das Bedürfnis der Kunden weder kennen noch Pflege, die sie verwenden.

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