Forum
Notlarimdan daha once karsilastigim ve enteresan olan bir durum c++ yeni çözülmüstir bu problem yıl 2001 sadece örnek fonctionlari yaziyorum
C++ fonksiyonlari asiri yüklemenize izin verir ve doğru olanın çağrildiğindan ya emin olur .
int f(int);
log f(double);
int i;
double d;
f(i) ; //f(int) i çağiriyoe;
f(d); //F(double) i cagiriyoe
benzer sekilde fonksiyon sablonlarini asiri yukleyebilirsiniz. buda bize so soruyu getirir.
Bizim basimiza gelen asagidake deklarasyonlarş ele aldik
template <typname T1 , ttpname T2 >
void g(T1,T2);
template<typename T> void g(T);
template<typename T> void g(T ,T);
template<typename T> void g(T *);
template<typename T> void g(T*,T);
template<typename T> void g(T,T*);
template<typename T> void g(int,T*);
template <> void g<int>(int);
void g(int,double);
void g(int) ;
Burada asiri yuklenmis bir g() ler iki grup olustu , biz bunu bir grup tek parametre , diger group da 2 parementre aldirtidk Bir group tek parementre diger groupda 2 parametre aldirtik
template <typname T1 , typname T2>
void g(T2,T2);
template <typname T> void g (T,T) ;
template <typname T> void g (T*,T) ;
template <typname T> void g (T,T*) ;
template <typname T> void g (int,T) ;
void g(int,double);
template <typname T> void g (T) ;
template <typname T> void g (T*) ;
template <typname T> void g (int) ;
void g(int);
2 paremetre bir varsayilana sahip , 2 parametre lı aşiri yüklemeyi dahil ederek işleri kasten kariştirdik . Böyle bir fonksiyon olsaydı doğr siralamayi belirlemek içın her 2 listede düşünülmesi sartti ,biri tek parametre diğeri cift parametre )
Her cagriyi sırasıyla inceledimizde yukardaki fonction lardan hangisi cagrildiğüma bakarsak satir nolu yazıyorm
int i ;
double d;
float f;
complex<double> c;
g(i) ;
1 10 u cagirir cunku tam olarak eslesmektedir
g<int>(i);
8 i cagirir cunko g<int>() acikca talep etmekde
g(i,i);
3 ü cağirir (T,int) dir cökü c++ da en iieslesme budur
g(c)
2 yi cagirir (T,complex<double> dır çünkü g() baska eslesemez
G(i,f);
1 i cagirir (T,int;T,float tı) 9.satira cok yakindir ancak enterasandır ki tam bir eslesme 9 da oluyor
g(i,d)
9 cagiriyor 9 tam esliyor
g(c,&c)
6 yi cagirir (T,complex<double> doble dır)çünko 6 en yakin asiri yüklenmedir
g(i,&d)
7 yi cagirir (T,double dir)
g(&d,d);
5 cagirir (T,double) dr
g(&d);
Acik olarak artık 4 ü istiyoruz
g(d,&i);
diğer bir cok asiri yüklemeye yakindir yanlızca tam olarak 1 cagirilir
g(&i,&i);
3 ü cagirir (T,int dir)
şimdi modern derleyiciler sablon destegi ii oldugundan derledik ve piyasaya sürdük ama fark ettikki asiri yuklenme var isin icinden cikamadık ve tüm fonksiyonlari saydık boylede 12 milyondan fasla fonction vardi bunu 2001 yilinda c++ tarihinde cozuldu yani o zamana kadar hic karsilasilmamisti , surulen işletim sistemide vista idi ..
Kısa ve öz bir başlık dahilinde konu etiketleri olursa daha çabuk erişilebilir olur.