2010-03-17 84 views
6

我怎樣才能明白什麼是這裏聲明:(這是從另一個職位採取this forum奇怪的聲明(模板)。 C++

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

我是這樣看:調用(ChT<int Fallback::*, &C::x>*)靜態函數f

模板,但後來我沒有意義爲什麼有一個地址的運算符,爲什麼有一個數組?

我還在學習如何理解C++聲明,所以請慢慢仔細地解釋一下。

+0

你爲什麼要這樣做? – Axarydax 2010-03-17 15:54:08

+0

@Axarydax在做什麼? – 2010-03-17 15:55:03

+0

我想我看到他從xD得到的那個 – 2010-03-17 16:02:25

回答

3

看到返回類型很重要。 所以,這個函數的返回類型是參考char[1]; 試想f返回類似參考以下:

char ret[1]; 

例如

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

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

使用一些類型定義:

typedef char (&arrayref_t)[1]; 

這是字符數組的引用。該數組有一個元素。

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

這是一個模板類,具有類型「指針Fallback類的int構件」實例化,以及構件指針xC類。

​​

函數現在需要一個指針到一個tmpl_t並返回一個arrayref_t

+0

我剛纔觀察到很有趣的事情(是的,我仍然在咀嚼它)。如果你在說「這是...,並且是類C中的成員指針x」,應該指出,由於類ChT的聲明,C類中的這個成員指針實際上是類Fallback的成員。所以,事實上他們是相互聯繫的。 – 2010-03-17 17:05:55