Ho la seguente serie di modelli:modelli di specializzazione
//1
template< typename T > void funcT(T arg)
{
std::cout<<"1: template< typename T > void funcT(T arg)";
}
//2
template< typename T > void funcT(T * arg)
{
std::cout<<"2: template< typename T > void funcT(T * arg)";
}
//3
template<> void funcT<int>(int arg)
{
std::cout<<"3: template<> void funcT<int>(int arg)";
}
//4
template<> void funcT< int * >(int * arg)
{
std::cout<<"4: template<> void funcT< int *>(int * arg)";
}
//...
int x1 = 10;
funcT(x1);
funcT(&x1);
Qualcuno può spiegare perché funcT(x1);
chiamate di funzione # 3 e funcT(&x1);
chiamate di funzione # 2, ma non 4 # come previsto?
Ho già letto questo articolo http://www.gotw.ca/publications/mill17.htm che dice che "la risoluzione di sovraccarico ignora le specializzazioni e opera solo sui modelli di funzione di base". Ma secondo questa logica funcT(x1);
dovrebbe chiamare la funzione # 1, non # 3. Sono confuso.
questo sembra pertinente: http://www.gotw.ca/publications/mill17.htm –
posso inviare un libro davvero buono per questo: Addison Wesley - Modelli C++ - La guida completa – erick2red