Domanda

So che Funzione Di Modelli sono utilizzati per rendere le funzioni e portatile, in modo che essi possano essere utilizzati con qualsiasi tipo di dati.

Anche La Specializzazione Esplicita di modelli, se abbiamo un'implementazione più efficiente per un tipo di dati specifico.

Ma allora, invece di La Specializzazione Esplicita si potrebbe anche solo un codice Nontemplate Funzione che potrebbe essere chiamato da main .Questo permetterebbe di risparmiare un po ' di tempo di elaborazione, come il compilatore sarebbe individuare Nontemplate Funzioni più veloce Esplicitamente Specializzati Basati Su Modelli, Funzioni che, a sua volta di essere migliore in termini di efficienza.

Allora, perché non usiamo La Specializzazione Esplicita quando abbiamo l'alternativa di chiamata Nontemplate Funzioni?

Per favore mi corregga Se sbaglio!

Edit 1: Mi è stato detto dal mio professore che ogni volta che facciamo la funzione di modelli e chiamare la funzione da main il compilatore cerca in primo luogo una funzione basato su modelli e se non è in grado di individuare che,poi cerca un modello di funzione da cui a sua volta fa una funzione basato su modelli e quindi richiede.

È stato utile?

Soluzione

Sembra che tu stia confondendo la compilazione efficienza efficienza run-time.La scelta di quale funzione chiamata viene effettuata in fase di compilazione, non di esecuzione, in modo che esso non fanno alcuna differenza per il tempo di esecuzione del programma.

La Specializzazione esplicita è utilizzato quando si dispone di un caso particolare che può beneficiare di un trattamento speciale.A volte questo si ritorce contro, come nel caso di std::vector<bool>, mentre altre volte è molto utile.Ciò significa che l'utente della funzione non ha bisogno di essere consapevoli del fatto che c'è un caso speciale;è solo trasparente.

Altri suggerimenti

Questo permetterebbe di risparmiare un po ' di tempo di elaborazione, come il compilatore sarebbe individuare le Funzioni Globali più veloce di quanto Esplicitamente Specializzata Funzioni basato su modelli che, a sua volta di essere migliore in termini di efficienza.

Perché il compilatore trovare un nontemplate funzione più veloce di una funzione di modello di specializzazione?Hai confrontato prestazioni di compilazione, per verificare questa affermazione?Se si utilizza una funzione chiamata f, il compilatore deve sempre compilare una serie di funzioni candidato e di eseguire la risoluzione dell'overload per determinare la corretta funzione per essere utilizzato.

In fase di runtime (che è quando le prestazioni conta davvero, giusto?) le prestazioni di chiamata a una funzione istanza modello dovrebbe essere niente di meglio che le prestazioni di chiamare un nontemplate funzione.

Allora, perché non usiamo la Specializzazione Esplicita quando abbiamo l'alternativa di chiamata Funzioni Globali?

Nel caso generale, per la funzione dei modelli, non utilizzare la specializzazione esplicita, perché è di solito confusa e difficile.La ISO C++ standard è poetico e attenzione per essere estremamente cauti quando specializzato funzione dei modelli.Si può leggere di Herb Sutter s "Perché Non Specializzati Funzione Di Modelli?" per una buona spiegazione dei problemi e il motivo per cui non si desidera specializzarsi funzione dei modelli.

Per ragioni di uniformità.La persona che utilizza l'API solo chiamate di metodi di particolari argomenti, un po 'di ottenere una generica funzione un po' di ottenere in modo esplicito funzioni specialistiche - il client non hanno bisogno né so, né la cura che usa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top