Tengo el siguiente conjunto de plantillas:plantillas de especialización
//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);
Por favor alguien puede explicar por qué funcT(x1);
llamadas de función # 3 y funcT(&x1);
llamadas de función # 2 # 4, pero no como se esperaba?
Ya he leído este artículo http://www.gotw.ca/publications/mill17.htm que dice que "la resolución de sobrecarga ignora las especializaciones y funciona solo en las plantillas de función base". Pero de acuerdo con esta lógica funcT(x1);
debe llamar a la función n. ° 1, no n. ° 3. Estoy confundido.
esto parece relevante: http://www.gotw.ca/publications/mill17.htm –
puedo enviarle un libro realmente bueno para esto: Addison Wesley - Plantillas C++ - La Guía Completa – erick2red