Je l'ensemble des modèles suivants:spécialisation Modèles
//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);
Quelqu'un peut-il s'il vous plaît expliquer pourquoi funcT(x1);
fonction des appels # 3 et funcT(&x1);
appels fonction # 2 mais pas # 4 comme prévu?
J'ai déjà lu cet article http://www.gotw.ca/publications/mill17.htm qui dit que "la résolution de surcharge ignore les spécialisations et fonctionne uniquement sur les modèles de fonction de base". Mais selon cette logique funcT(x1);
devrait appeler la fonction # 1, pas # 3. Je suis confus.
cela semble pertinent: http://www.gotw.ca/publications/mill17.htm –
Je peux vous envoyer un livre vraiment bon pour cela: Addison Wesley - Modèles C++ - Le Guide complet – erick2red