Ben şablonları aşağıdaki seti var:Şablonlar uzmanlık
//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);
Birisi lütfen açıklayabilir neden funcT(x1);
aramalar fonksiyon 3. ve funcT(&x1);
aramalar fonksiyon 2. ancak beklenmemektedir 4. olarak?
http://www.gotw.ca/publications/mill17.htm numaralı bu makaleyi okuduğumda, "aşırı yük özünürlüğü uzmanlıkları yoksayar ve yalnızca temel işlev şablonlarında çalışır" der. Fakat bu mantığa göre funcT(x1);
, # 1 numaralı işlevi değil, # 3'ü çağırmalıdır. Kafam karıştı.
Bu konuyla ilgili görünüyor: http://www.gotw.ca/publications/mill17.htm –
Bunun için gerçekten iyi bir kitap gönderebilirim: Addison Wesley - C++ Şablonları - Tam Kılavuz – erick2red