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>
mentrevector<anything_else, A>
essere mappato internamente aclass 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).