[英]Strange declaration(templates). C++
我如何理解這里聲明的內容:(這是從本論壇的其他帖子中獲取的)
template<typename C> static char (&f(ChT<int Fallback::*, &C::x>*))[1];
這是我的閱讀方式:
靜態函數f
模板調用(ChT<int Fallback::*, &C::x>*)
,但后來我無法理解為什么有一個地址運算符,為什么有一個數組?
我還在學習如何理解C ++聲明,所以請慢慢仔細地解釋一下。
使用一些typedef:
typedef char (&arrayref_t)[1];
這是對字符數組的引用。 該數組有一個元素。
typedef ChT<int Fallback::*, &C::x> tmpl_t;
這是一個模板類,使用“指向Fallback
類的int
成員的指針”類型實例化,並在C
類中指向x
的成員指針。
static arrayref_t f(tmpl_t*);
該函數現在接受一個指向tmpl_t
的指針並返回一個arrayref_t
。
看到返回類型很重要。 所以,這個函數的返回類型是對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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.