Forum

Fonksiyon sablonu a...
 
Bildirimler
Hepsini Temizle

Fonksiyon sablonu asiri yüklenmesi ile ilgili bir sıkantıyı dile getirecem size c++ da

2 Yazılar
2 Üyeler
0 Reactions
487 Görüntüleme
(@sevimKrono)
Gönderiler: 22
Eminent Member
Konu başlatıcı
 

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 ..

 

 
Gönderildi : 30/07/2009 08:11

(@ugurdasdemir)
Gönderiler: 1824
Noble Member
 

Kısa ve öz bir başlık dahilinde konu etiketleri olursa daha çabuk erişilebilir olur.

 
Gönderildi : 11/08/2009 12:12

Paylaş: