簡體   English   中英

奇怪的聲明(模板)。 C ++

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM