8

Ad esempio, assumiamo per il ragionamento che è stata trovata un'implementazione più efficiente (archiviazione, operazioni su di esso) per un vettore di tipi interi (rispetto all'implementazione vettoriale generica). Una libreria standard conforme può fare qualcosa del tipo:Un'implementazione di libreria standard può specializzare i tipi standard?

template <class T, class A, class Enable = void> 
class vector { ... }; 

template <class T> 
class vector<T, A, std::enable_if_t<std::is_integral<T>::value>> { ... }; 

Penso che questo sarebbe illegale a causa del parametro di modello aggiuntivo.

Ma che dire di un po 'di magia compilatore: (a parte il lavoro di attuazione extra) sarebbe qualcosa di simile essere consentito:

  • vector<integral_type, A> di essere internamente mappato-class vector_integral<T, A> mentre
  • vector<anything_else, A> essere mappato internamente a class vector<T, A>.

- Questo non è ovviamente su specializzazioni esplicitamente menzionate nella norma, come std::vector<bool>

- La specializzazione sarebbe ovviamente avere la stessa interfaccia e il comportamento osservabile.

- Ignoriamo concepts, in quanto non sono ancora standard. A meno che tu non abbia dei fatti.

- Questa è una questione accademica pura (leggere curiosità personale).

risposta

1

Fintanto che l'implementazione della libreria standard è all'altezza delle garanzie emesse dallo standard, è consentito avere specializzazioni. Queste garanzie includono ovviamente la complessità della crescita, le funzioni dell'interfaccia e, per alcune classi, il layout interno dei dati.

La specializzazione vector<bool> è, a mia conoscenza, inclusa nello standard poiché la sua disposizione interna dei dati differisce dalla classe di libreria generica vector<T>, pertanto deve essere specificatamente consentita dallo standard.

Lo standtard dice esplicitamente 17.5.1.4 annuncio. 7: requisiti

complessità specificata nelle clausole della biblioteca sono limiti superiori, e le implementazioni che forniscono maggiori garanzie di complessità soddisfano i requisiti.

Problemi correlati