2010-03-17 17 views
6

Nasıl burada beyan ne anlayabiliriz: (bu this forum başka görevinden alınır)Garip bildirim (şablonlar). C++

İşte
template<typename C> static char (&f(ChT<int Fallback::*, &C::x>*))[1]; 

Okudum nasıl: (ChT<int Fallback::*, &C::x>*) ile adlandırılan statik fonksiyonu f ait

şablonu, ama sonra mantıklı olamaz niçin bir adres-operatörü var ve neden bir dizi var?

Hala C++ bildirimlerini nasıl anlayacağımı öğreniyorum, lütfen bunu yavaş ve dikkatli bir şekilde açıklayınız.

+0

neden bunu yapıyorsunuz? – Axarydax

+0

@Axarydax ne yapıyor? –

+0

Sanırım nereden aldığını gördüm xD –

cevap

3

Dönüş türünü görmek önemlidir. Yani, bu işlevin dönüş türü char[1]; Bazı typedefs kullanma örnek

template<typename C> static char (&f(ChT<int Fallback::*, &C::x>*))[1] 
{ 

    static char xx[1] = {'F'}; 
    return xx; 
} 
7

için

char ret[1]; 

:

typedef char (&arrayref_t)[1]; 

Bu karakter dizisi için bir referans f döner aşağıdaki referans gibi bir şey olduğunu düşünün . Dizinin bir elemanı vardır.

typedef ChT<int Fallback::*, &C::x> tmpl_t; 

Bu "Fallback sınıfının bir int elemanına pointer" türü ile örneği bir şablon sınıfı, ve sınıf C içinde x için üye işaretçidir.

static arrayref_t f(tmpl_t*); 

fonksiyonu şimdi tmpl_t için bir işaretçi alır ve bir arrayref_t döndürür.

+0

Sadece ÇOK ilginç şey gözlemledim (evet, hala munching). “Bu,… ve C sınıfında x'e üye bir işaretçi” dediğiniz yerde, C sınıfındaki bu üye işaretçisinin, ChT sınıfının bildirilmesinden dolayı, aslında Fallback sınıfının üyesi olduğu belirtilmelidir. Yani gerçekte birbirlerine bağlılar. –