(sto assumendo la conoscenza del Abrahams/Dimov example in questa domanda.)funzione template specializzazione e l'esempio Abrahams/Dimov
supponga c'è qualche codice di terze parti in un colpo di testa che, come questo, che non è possibile modificare:
template<class T> void f(T); // (1) base template 1
template<class T> void f(T *); // (2) base template 2
template<> void f<>(int *); // (3) specialization of (2)
la domanda è:
Se mi è stato dato alle dichiarazioni di cui sopra come-è, è possibile per me ora specializzare il modello di base 1 per il caso in cui T = int *
(per esempio)?
Oppure la semplice dichiarazione del modello di base 2 implica che il modello di base 1 non può più essere specializzato (almeno per i puntatori)?
Anche se si potesse, sarebbe possibile chiamare quella specializzazione? Sembra che il template di base 2 sia sempre "vincente" se f viene chiamato con un puntatore. – Mat
@Mat: non dall'unità di traduzione corrente, per quanto posso vedere, ma potrebbe essere richiamabile da un'altra unità di traduzione, penso, giusto? Supponendo che l'altra unità di traduzione abbia una dichiarazione non sovraccaricata di # 1 e della specializzazione corrispondente. – Mehrdad
Un TU che non avrebbe il modello di base 2 in ambito? (Non sono sicuro di aver capito.) Attenti anche alle violazioni ODR. – Mat