我怎樣才能明白什麼是這裏聲明:(這是從另一個職位採取this forum)奇怪的聲明(模板)。 C++
template<typename C> static char (&f(ChT<int Fallback::*, &C::x>*))[1];
我是這樣看:調用(ChT<int Fallback::*, &C::x>*)
靜態函數f
的
模板,但後來我沒有意義爲什麼有一個地址的運算符,爲什麼有一個數組?
我還在學習如何理解C++聲明,所以請慢慢仔細地解釋一下。
我怎樣才能明白什麼是這裏聲明:(這是從另一個職位採取this forum)奇怪的聲明(模板)。 C++
template<typename C> static char (&f(ChT<int Fallback::*, &C::x>*))[1];
我是這樣看:調用(ChT<int Fallback::*, &C::x>*)
靜態函數f
的
模板,但後來我沒有意義爲什麼有一個地址的運算符,爲什麼有一個數組?
我還在學習如何理解C++聲明,所以請慢慢仔細地解釋一下。
看到返回類型很重要。 所以,這個函數的返回類型是參考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;
}
使用一些類型定義:
typedef char (&arrayref_t)[1];
這是字符數組的引用。該數組有一個元素。
typedef ChT<int Fallback::*, &C::x> tmpl_t;
這是一個模板類,具有類型「指針Fallback
類的int
構件」實例化,以及構件指針x
在C
類。
函數現在需要一個指針到一個tmpl_t
並返回一個arrayref_t
。
我剛纔觀察到很有趣的事情(是的,我仍然在咀嚼它)。如果你在說「這是...,並且是類C中的成員指針x」,應該指出,由於類ChT的聲明,C類中的這個成員指針實際上是類Fallback的成員。所以,事實上他們是相互聯繫的。 – 2010-03-17 17:05:55
你爲什麼要這樣做? – Axarydax 2010-03-17 15:54:08
@Axarydax在做什麼? – 2010-03-17 15:55:03
我想我看到他從xD得到的那個 – 2010-03-17 16:02:25